Для объединения нескольких файлов Excel (XLSX/XLS) в один с использованием библиотеки PhpSpreadsheet, вам нужно поочередно открыть каждый файл, извлекать из него листы и добавлять их в целевой файл Excel. Ниже привожу пример кода, который делает это:
```php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
// Создаем новый экземпляр Spreadsheet - он будет нашим итоговым файлом
$spreadsheet = new Spreadsheet();
// Массив с названиями файлов, которые нужно объединить
$filesToMerge = ['file1.xlsx', 'file2.xls', 'file3.xlsx'];
// Перебираем файлы для объединения
foreach ($filesToMerge as $file) {
// Загружаем файл
$reader = IOFactory::createReaderForFile($file);
$reader->setReadDataOnly(true); // Опционально, если нам не нужны стили и форматирование
$loadedSheet = $reader->load($file);
// Перебираем все листы в загруженном файле
foreach ($loadedSheet->getWorksheetIterator() as $worksheet) {
// Создаем новый лист в целевом файле Spreadsheet
$newSheet = $spreadsheet->createSheet();
// Копируем данные из текущего листа загруженного файла в новый лист
$newSheet->fromArray(
$worksheet->toArray(null, true, true, true) // Получаем данные с форматированием
);
// Устанавливаем заголовок нового листа, как в исходном файле
$sheetTitle = $worksheet->getTitle();
$newSheet->setTitle($sheetTitle);
}
}
// Удалите первоначальный пустой лист, который PhpSpreadsheet создает по умолчанию
$sheetIndex = $spreadsheet->getIndex($spreadsheet->getSheetByName('Worksheet'));
$spreadsheet->removeSheetByIndex($sheetIndex);
// Устанавливаем активным первый лист в новом файле
$spreadsheet->setActiveSheetIndex(0);
// Записываем итоговый файл на диск
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('merged_file.xlsx');
```
Обратите внимание, что для запуска данного примера кода у вас должна быть установлена библиотека PhpSpreadsheet и ее зависимости через Composer. Вы можете установить ее с помощью команды:
```bash
composer require phpoffice/phpspreadsheet
```
После выполнения скрипта у вас должен получиться файл `merged_file.xlsx`, в который будут объединены все листы из указанных файлов Excel.