Как с использованием библиотеки PHPOffice/PHPWord можно извлечь все таблицы с заданным названием из разных документов word и сохранить их в одном файле?

Каким образом можно использовать библиотеку PHPOffice/PHPWord для извлечения таблицы с названием "Таблица 7.1" из каждого из более чем 30 документов формата docx, находящихся в определенной папке, и сохранить все таблицы в единый документ doc?
  • 20 ноября 2023 г. 8:34
Ответы на вопрос 2
Для выполнения задачи, описанной в вопросе, можно использовать следующий код:

```php
require_once 'vendor/autoload.php';

use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\TemplateProcessor;

// Создаем новый документ doc
$templateProcessor = new TemplateProcessor();
$outputDoc = 'output.doc';
$templateProcessor->saveAs($outputDoc);

// Получаем список всех файлов в папке с документами
$inputDir = 'путь_к_папке';
$inputFiles = scandir($inputDir);

// Ищем таблицы с названием "Таблица 7.1" в каждом документе и добавляем их в документ doc
foreach ($inputFiles as $file) {
    if (pathinfo($file, PATHINFO_EXTENSION) === 'docx') {
        $docx = IOFactory::load($inputDir.'/'.$file);
        $tables = $docx->getElementsByName('Таблица 7.1');
        foreach ($tables as $table) {
            $templateProcessor->copyBlock('Таблица 7.1', true);
            $templateProcessor->setComplexBlock('Таблица 7.1', $table);
        }
    }
}

// Сохраняем итоговый документ doc
$templateProcessor->saveAs($outputDoc);
```

Примечания:
1. Убедитесь, что у вас установлена библиотека PHPOffice/PHPWord.
2. Замените `'путь_к_папке'` на реальный путь к папке с документами.
3. `'Таблица 7.1'` - это название таблицы, которую вы ищете. Замените его на свое.
4. Итоговый документ будет сохранен под именем `'output.doc'`.
содержимое последнего пройденного документа сохраняется только потому, что в цикле перезаписывается значение переменной $phpWord, в которую собирается результат. В результате, возможно, вы видите все содержимое документа, поскольку вы повторно добавляете его таблицы в конец уже существующих.
Похожие вопросы