Скопируйте диаграммы из (.xls или .xlsx), используя PHP - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над файлом шаблона Excel для некоторых проектов, и моя цель - заполнить его PHP. Я создаю документ Excel с двумя листами, один из которых представляет собой таблицу со всей информацией, которую я собираюсь построить, а второй - просто график, основанный на таблице из предыдущего листа.

Всякий раз, когда я использую (https://github.com/PHPOffice/PhpSpreadsheet) PHPSpreadsheet (так как PHPExcel устарел), я могу читать / писать / копировать / и т. Д. Первый лист, но всякий раз, когда я пытаюсь сохранить лист, не касаясь листа графика вообще , ничего не происходит. Я успешно сохраняю файл, но когда я пытаюсь открыть его, я получаю сообщение об ошибке, в котором говорится, что Excel обнаружил в файле нечитаемый контент и восстанавливает его. Я исправляю его, и второй лист с графиком пуст.

https://github.com/PHPOffice/PhpSpreadsheet/issues/382

Это самая близкая вещь, которую я нашел в своей проблеме, и я добавил функции setIncludeChart, но, похоже, ничего не работает.

Мне также кажется, что я исчерпал результаты онлайн-поиска и теперь надеюсь, что есть альтернатива PHPSpreadsheet, которая позволит мне использовать диаграмму в шаблонном (прилагаемом) файле Excel.

        $xls = 'KPI_ReadinessTemplate.xls';
        $xlsxTarget = 'NEWX_KPI_ReadinessTemplate.xlsx';
        $xlsTarget = 'NEW_KPI_ReadinessTemplate.xls';

        $inputFileType = 'Xlsx';
        $inputFileName = $xlsx;
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
        $reader->setIncludeCharts(true);
        $spreadsheet = $reader->load($inputFileName);
        $worksheet = $spreadsheet->getActiveSheet();
        $worksheet->getCell('A1')->setValue('Help me');
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->setIncludeCharts(true);
        $fileData = $writer->save($xlsxTarget);

        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
        $reader->setIncludeCharts(TRUE);
        $workbook = $reader->load($xls);
        $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($workbook);
        $writer->setIncludeCharts(TRUE);
        $writer->save($xlsTarget);

Я ожидаю, что диаграмма будет скопирована, в приведенном выше коде нет изменений файла, это должна быть точная копия предоставленного файла один к одному, но она вообще не работает, так как кажется, что график поврежден, и я должен восстановить Excel в следующий раз, когда я его открою.

РЕДАКТИРОВАТЬ: Я также установил архивированный PHPExcel и попробовал его с помощью График исчезает, чтение и запись файла Excel с использованием PHPExcel , и у меня все еще была та же проблема.

...