Для того чтобы из разных Word документов собрать все таблицы с заданным названием и сохранить их в один файл, можно воспользоваться библиотекой PHPOffice/PHPWord.
Первым шагом необходимо установить данную библиотеку, используя Composer. Для этого в командной строке перейдите в корневую папку вашего проекта и выполните следующую команду:
composer require phpoffice/phpword
После успешной установки библиотеки, создайте новый PHP файл и подключите автозагрузчик библиотеки:
require_once 'vendor/autoload.php';
Для начала работы с библиотекой PHPOffice/PHPWord, создайте новый объект класса PhpOfficePhpWordPhpWord:
$phpWord = new PhpOfficePhpWordPhpWord();
Затем, создайте переменную, в которую будет сохранен массив путей к Word документам, из которых нужно получить таблицы. В данном примере предполагается, что все документы находятся в одной папке и имеют расширение .docx:
$documentPaths = glob('path/to/documents/*.docx');
Далее, пройдитесь по каждому пути документа и откройте его с помощью класса PhpOfficePhpWordIOFactory:
foreach ($documentPaths as $documentPath) { $phpWord = PhpOfficePhpWordIOFactory::load($documentPath); // Далее следует код для поиска и обработки таблиц в каждом документе }
В данном примере предполагается, что каждый документ в папке содержит только одну таблицу. Если документы могут содержать несколько таблиц, то необходимо добавить внутренний цикл для обхода всех таблиц в каждом документе.
Для поиска таблиц с заданным названием в каждом документе, используйте метод PhpOfficePhpWordPhpWord::getTables():
$tables = $phpWord->getTables(); foreach ($tables as $table) { // проверка названия таблицы }
Далее, в цикле обработки каждой таблицы можно проверить названия таблицы и, если оно соответствует заданному, добавить эту таблицу в новый документ:
if ($table->getTitle() === 'название_таблицы') { $section = $phpWord->addSection(); $section->addText('Таблица из документа ' . $documentPath); $section->addTable($table); }
В данном примере каждая найденная таблица добавляется в новый раздел (секцию) нового документа. Для каждой таблицы также добавляется небольшой текст, чтобы можно было отличить таблицы из разных документов в новом документе.
Наконец, сохраните полученный результат в новый Word документ с помощью метода PhpOfficePhpWordIOFactory::createWriter():
$writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007'); $writer->save('path/to/result/document.docx');
При выполнении данного кода, все таблицы с заданным названием из разных документов будут собраны и сохранены в один файл с указанным путем и именем.
Обратите внимание, что настройка стилей таблиц и форматирование данных из разных документов не рассматривается в данном ответе и может потребовать дополнительной обработки.