You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:43:38