首页 > 解决方案 > 使用 PHP 从(.xls 或 .xlsx)复制图表

问题描述

我正在为一些项目制作模板 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);

我期望图表被复制,在上面的代码中没有对文件进行修改,它应该是所提供文件的精确一对一副本,但它根本不起作用,因为它看起来像图表被损坏了,下次打开它时我必须修复它。

编辑:我还安装了存档的 PHPExcel 并尝试使用Graph disapear 使用 PHPExcel 读写 excel 文件,但我仍然遇到同样的问题。

标签: phpexcelphpspreadsheet

解决方案


推荐阅读