@Valentine5

Как дополнять, а не перезаписывать .docx файл?

Приветствую!

Воспользовался библиотекой PHP Word, чтобы создавать .docx отчеты из скачиваемых в цикле xml-ек. Переменные $res и $lo на каждой итерации получают новый набор данных. Когда я в цикле записываю эти данные в документ Word, то каждая следующая итерация пишет данные поверх ранее записанного. А мне надо бы, чтобы старя информация сохранялась, а новое добавлялось ниже.. Подскажите, пожалуйста, что я делаю не так?

Мой код:
$phpWord = new \PhpOffice\PhpWord\PhpWord();

PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true);

$section = $phpWord->addSection();

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');

foreach ($tmp as $key => $value) {

    if (is_string($value)) {
        /*var_dump(substr($value, 21));*/
        $cut = $value;
        $output = 'https://yandex.ru/search/xml?user=&key=&query=' . urlencode($cut) . '&lr==ru&sortby=&filter=none&maxpassages=5&groupby=ocs-in-group%3D3';

        $result = file_get_contents($output);

        $al = simplexml_load_string($result);

        $clay = $al->{'response'}->results->grouping->group[0]->doc->title->hlword;
        echo '<pre>';
        print_r($al);
        echo '<pre>';

        foreach ($clay as $sd) {
            $arr[] = '' . $sd . '';
        }
        $res = implode(" ", $arr);

        $arr = [];

        $lo = $al->{'response'}->results->grouping->group[0]->doc->url;

        if($key === 0) {
            $section->addText('Отчет по публикациям информационного агентства');

        }

        $section->addText($res);

        $section->addText($lo);

        $section->addTextBreak();

        $objWriter->save('helloWorld.docx');

    if($key % 3 == 1) {
        $key = $key + 1;
        break;
    }

}

$_SESSION["time"] = $key;
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
Adamos
@Adamos
Стоит просто хранить полученную информацию, а не docx.
Из нормальной информации нет проблем в любой момент сформировать docx - исключительно для вывода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Источник вашей проблемы:
foreach ($tmp as $key => $value) {
  ...

  $objWriter->save('helloWorld.docx');
}


P.S. Хотя, что-то я уже не уверен. Судя по исходникам библиотеки, должно бы работать (пусть и с перезаписыванием файла кучу лишних раз).
Ответ написан
@karminski
Senior React.JS Developer
Если я не ошибаюсь, функции append в библиотеке нет. Записывайте данные каждый раз в новый файл с новым именем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы