PHPExcel操作Excel模板图表丢失,求可保留元素的PHP编辑库
问题:PHPExcel填充Excel模板后图表丢失,寻求替代PHP库
我尝试用PHPExcel加载Excel2007模板文件,填充单元格数据,虽然已经设置了setIncludeCharts(TRUE),但生成的文件里图表还是丢失了,多次尝试都解决不了。现在需要找其他PHP库,要求能打开.xlsx/.xlsm模板填充数据,并且完整保留图表、数据透视表、宏、表单、按钮这些元素,只需要从数据库取数据填充单元格即可。
我的PHPExcel代码如下:
<?php date_default_timezone_set('Europe/London'); require_once 'excel/PHPExcel/IOFactory.php'; require_once 'excel/PHPExcel.php'; $objPHPExcel = new PHPExcel(); $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setIncludeCharts(TRUE); $objPHPExcel = $objReader->load('WorkingFile_Daily.xlsx'); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('B11', 4) ->setCellValue('B12', 5) ->setCellValue('B13', 6) ->setCellValue('B14', 7); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->setIncludeCharts(TRUE); $objWriter->save('WorkingFile_Daily New.xlsx'); ?>
推荐的替代PHP库
1. PhpSpreadsheet(PHPExcel官方继任者)
PHPExcel已停止维护,PhpSpreadsheet是官方替代项目,对图表、宏等复杂元素的支持更稳定完善,能直接读取.xlsx/.xlsm模板,填充数据后完整保留原有格式与元素。
核心使用示例:
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; // 读取模板 $reader = IOFactory::createReader('Xlsx'); $reader->setIncludeCharts(true); $spreadsheet = $reader->load('WorkingFile_Daily.xlsx'); // 填充单元格数据 $worksheet = $spreadsheet->getActiveSheet(); $worksheet->setCellValue('B11', 4) ->setCellValue('B12', 5) ->setCellValue('B13', 6) ->setCellValue('B14', 7); // 保存文件,保留图表等元素 $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->setIncludeCharts(true); $writer->save('WorkingFile_Daily New.xlsx');
注意:处理带宏的.xlsm文件时,需替换为Xlsm读写器(createReader('Xlsm')、createWriter($spreadsheet, 'Xlsm')),才能完整保留宏、表单按钮等元素。
2. 其他备选(优先级低于PhpSpreadsheet)
- Spout:主打高效处理大型Excel文件,但对图表、数据透视表等复杂元素的支持有限,仅适合纯数据读写场景。
- PHPExcel社区分支:部分社区分支修复了PHPExcel的图表丢失问题,但项目维护性差,不推荐长期使用。
关键注意事项
- 填充数据时仅修改单元格值,不要改动模板中原有的样式、图表数据源关联,避免破坏原有元素。
- 确保使用对应格式的读写器处理
.xlsx和.xlsm文件,否则会丢失宏等专属元素。
内容的提问来源于stack exchange,提问作者Sameer Sashittal
相关产品推荐
相关产品推荐

