PHPExcel - 图表中未显示所有值

时间:2012-10-11 00:04:41

标签: php graph charts phpexcel missing-data

有问题的图书馆是PHPExcel 1.7.7

我使用了codeplex中某个帖子中的示例代码来创建PHPExcel图表。但是,论坛中提供的示例代码只处理两列数据,我希望扩展图表中显示的列数。无论我尝试使用它,都不会显示第三组数据(D列及更高版本)。

标签/类别字符串没有问题 - 因此没有与任何保留名称发生冲突(即使它们是字符串),我返回了plotValues以查看是否有任何内容丢失,我仍然看到定义的列显示在那里,但无法弄清楚为什么第三列没有显示在图表中。

$excel->getActiveSheet()->fromArray(array(
    $header ,
    array('Central',   12,   15 , 12 ),
    array('Northeast',   56,   73 , 10 ),
    array('Southeast',   52,   61 , 33 ),
    array('Western',   30,   32 , 55 ),
));


$labels = array(
    new PHPExcel_Chart_DataSeriesValues('String', 'Summary!$B$1', null, 1),
    new PHPExcel_Chart_DataSeriesValues('String', 'Summary!$C$1', null, 1),
    new PHPExcel_Chart_DataSeriesValues('String', 'Summary!$D$1', null, 1),
);

$categories = array(
    new PHPExcel_Chart_DataSeriesValues('String', 'Summary!$A$2:$A$5', null, 4),
);

// this is where the problem arises - the third DataSeriesValues is not being displayed
$values = array(
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$B$2:$B$5', null, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$C$2:$C$5', null, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$D$2:$D$5', null, 4),
/*
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$C$2:$C$5', null, 5),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$D$2:$D$5', null, 5)
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$E$2:$E$5', null, 5),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Summary!$F$2:$F$5', null, 5),
*/
);

$series = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_BARCHART,       // plotType
    PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED,  //      plotGrouping
    array(0, 1),                                    // plotOrder
    $labels,                                        // plotLabel
    $categories,                                    // plotCategory
    $values                                         // plotValues
);

$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
$plotarea = new PHPExcel_Chart_PlotArea(null, array($series));
$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, null, false);


$chart = new PHPExcel_Chart(
    'chart1',                                       // name
    null,                                           // title
    $legend,                                        // legend
    $plotarea,                                      // plotArea
    true,                                           // plotVisibleOnly
    0,                                              // displayBlanksAs
    null,                                           // xAxisLabel
    null                                            // yAxisLabel
);

$chart->setTopLeftPosition('A7');
$chart->setBottomRightPosition('H20');
$excel->getActiveSheet()->addChart($chart);
$excel->getActiveSheet()->setTitle("Summary");

1 个答案:

答案 0 :(得分:2)

正如罗比指出的那样:当您在创建系列时设置plotOrder值时,您只是告诉图表使用0和1

的图表
array(0, 1),

不是0,1和2

array(0, 1, 2),

我倾向于使用

range(0, count($values)-1),

确保包含所有数据系列(无论多少)