Пытаюсь объединить excel файлы в один, вытаскивая из файлов листы и добавляя их в общий файл.
В переменной $files у меня хранятся ссылки на excel файлы на сервере.
$spreadsheetMain=new Spreadsheet();
$spreadsheetMain->removeSheetByIndex(0);
foreach ($files as $key => $links) {
try {
$spreadsheet=(new \PhpOffice\PhpSpreadsheet\Reader\Xlsx)
->load($links)
->getActiveSheet()
->setTitle("Worksheet_".rand(1,1000));
} catch(\Exception $e){
$spreadsheet=(new \PhpOffice\PhpSpreadsheet\Reader\Xls)
->load($links)
->getActiveSheet()
->setTitle("Worksheet_".rand(1,1000));
}
$spreadsheetMain->addExternalSheet($spreadsheet);
}
$file=new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheetMain); // пока нет проверки на xls (у меня пока
их все равно нет)
$folderName=self::createFolder(); //создание папки на сервере, работает нормально.
$file->save(
"{$_SERVER['DOCUMENT_ROOT']}/upload/tmp/{$folderName}/mergedFilesDoc.xlsx"
);
при сохранении у меня вылетает ошибка:
PhpOffice\PhpSpreadsheet\Cell\Cell::setXfIndex(): Argument #1 ($indexValue) must be of type int, null given, called in /home/bitrix/www/local/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php on line 1405 (0)
/home/bitrix/www/local/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php:763
#0: PhpOffice\PhpSpreadsheet\Cell\Cell->setXfIndex
/home/bitrix/www/local/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php:1405
#1: PhpOffice\PhpSpreadsheet\Spreadsheet->garbageCollect
/home/bitrix/www/local/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php:306
#2: PhpOffice\PhpSpreadsheet\Writer\Xlsx->save
/home/bitrix/www/local/warehouses/class/FileBuilder.php:83
я зашел в метод save у Spreadsheet.php и попробовал проскочить ошибку
$test=$cell->getXfIndex();
if ($test!=null && $test<count($map))
$cell->setXfIndex($map[$cell->getXfIndex()]);
файл создается, но почему-то пропали стили с файлов (бордерды ячеек, бг колор ячеек, выравнивание текста в ячейках) , а еще при открытии файла он говорит, что файл поврежден и восстанавливает его.
Я пробовал через эту библиотеку самописную еще делать
https://github.com/infostreams/excel-merge но она работает через раз и не все файлы открывает.