PHP Spreadsheet图表:如何直接传入数据值而非使用工作表单元格数据
使用PhpSpreadsheet直接向图表传入数据值无显示问题
我在项目中使用phpoffice/phpspreadsheet,整体体验良好,但遇到一个问题:无法直接向图表传入指定数据值,必须依赖工作表单元格数据。
按文档说明,DataSeriesValues对象允许dataSource传null,dataValues传混合类型数组,但实际操作后图表无显示效果(图表空白)。
尝试的代码
// Set the Data values for each data series we want to plot // Datatype // Cell reference for data // Format Code // Number of datapoints in series // Data values // Data Marker $dataSeriesValues = [ // 尝试直接传入数据值 new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 4, ['12', '56', '52', '30']), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 4, ['15', '73', '61', '32']), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 3, ['21', '86', '69']), // 原来依赖工作表单元格的写法(注释掉了) //new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), //new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), //new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ];
排查情况
- 已确认传入的数据值会被写入
/Writer/Xlsx/Chart.php的对应代码块,但图表渲染无变化:
if (!empty($dataValues)) { foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) { $objWriter->startElement('c:pt'); $objWriter->writeAttribute('idx', $plotSeriesKey); $objWriter->startElement('c:v'); $objWriter->writeRawData($plotSeriesValue); $objWriter->endElement(); $objWriter->endElement(); } }
- 查看
refresh方法代码,dataSource为null是被允许的:
public function refresh(Worksheet $worksheet, bool $flatten = true): void { if ($this->dataSource !== null) { ...
项目结构复杂,直接传数据值会更简便,不想用“虚拟工作表存数据再生成图表”的备选方案,求解决方向。
内容的提问来源于stack exchange,提问作者Hobbes
相关产品推荐
相关产品推荐

