1

我开发了一个程序,其中包括创建包含不同单元格的新 Excel 工作表。下一步是生成一个垂直条形图来显示从数据单元格中检索到的各种数据。

rangeToArray()所有图表示例都可以正常工作,我没有遇到任何特定问题,但是每当我尝试通过调用and方法创建自己的图表时,fromArray()工作表中都不会出现任何内容,请参阅下面的代码子集以澄清此问题:

第一步包括创建一个新的工作表,其中包含两个单元格,每个单元格有 40 个数据,之后,我通过调用rangeToArray()方法从这些单元格中检索数据,然后最后一步是调用该fromArray()方法以使用这些数据创建图表,但是它不起作用,图表仍然是空的,我只能显示标题和yAxisLabel.

我怀疑该fromArray()方法有问题,但我不知道为什么,您能否通过使用这种方法给出一个类似的工作示例来帮助我?提前致谢

$retrieve_data = array();

$retrieve_data = $worksheet->rangetoArray("D8:E48",null,null,null);

$worksheet = $objPHPExcel->getActiveSheet();   

$objWorksheet = $worksheet;   

$objWorksheet->fromArray($retrieve_data, NULL, 'D8', false);

$dataseriesLabels = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$8', null, 1), new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$E$8', null, 1),);

$xAxisTickValues = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$8:$D$27', null, 20),);

$dataSeriesValues = array( new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$8:$D$27', null, 20), new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$E$8:$E$27', null, 20),);

$series = new PHPExcel_Chart_DataSeries( PHPExcel_Chart_DataSeries::TYPE_BARCHART, plotType PHPExcel_Chart_DataSeries::GROUPING_STANDARD, range(0, count($dataSeriesValues)-1), $dataseriesLabels, $xAxisTickValues, $dataSeriesValues);

$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);

$title = new PHPExcel_Chart_Title('Test Column Chart');

$yAxisLabel = new PHPExcel_Chart_Title('Value');

$chart = new PHPExcel_Chart( 'chart1', $title, $legend, $plotarea, true, 0, null, $yAxisLabel);

$chart->setTopLeftPosition('G2');

$chart->setBottomRightPosition('S20');

$objWorksheet->addChart($chart);

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');   
header('Content-Disposition: attachment;filename="BAL_Delhaize2012.xlsx"');   
header('Cache-Control: max-age=0');

objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->setIncludeCharts(TRUE); 
$objWriter->save('php://output');
4

2 回答 2

1

我可以在图表定义中看到两个明显的问题:

$xAxisTickValues = array( 
    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$8:$D$27', null, 20),
);

$dataSeriesValues = array( 
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$8:$D$27', null, 20), 
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$E$8:$E$27', null, 20),
);

第一组数据系列值真的应该与您的 x 轴刻度值相同吗?

$series = new PHPExcel_Chart_DataSeries( 
    PHPExcel_Chart_DataSeries::TYPE_BARCHART, 
    plotType PHPExcel_Chart_DataSeries::GROUPING_STANDARD, 
    range(0, count($dataSeriesValues)-1), 
    $dataseriesLabels, 
    $xAxisTickValues, 
    $dataSeriesValues
);

“plotType”一词应在此处引发解析器错误。

但是,如果您认为问题出在 fromArray() 方法上,请在没有图表的情况下对其进行测试,以确认它正在执行您期望的操作

于 2012-10-04T23:01:23.463 回答
0

标记,

糟糕,我忘了回答你的问题。我在示例中犯了一个错误,这是关于数据系列值和 x 轴刻度值的代码:

$dataseriesLabels = array(
new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$8', null, 1),
new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$E$8', null, 1),);

$xAxisTickValues = array(
new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$9:$D$27', null, 20),);

标签位于 $D$8 和 $E$8 单元格中,而数据从 $D$9 到 $D$27

顺便说一句,当您没有收到错误消息时,调试此类问题的最简单方法是什么?

于 2012-10-05T04:22:44.057 回答