我想用phpexcel画一个雷达图,但是当我用Microsoft Excel 2010打开生成的文件时,图表的主轴丢失了(如下图所示,第一个是错误的,第二个是正确的(。
phpexcel绘制的错误图表
Excel 2010 绘制的正确图表
然后我读了phpexcel的例子'33chartcreate-radar.php',但它也有同样的问题。
如何显示主轴?
$excel = new PHPExcel();
$sheet = $excel->getActiveSheet();
$sheet->setTitle('sheet');
$data = [
['Direction', 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'],
['Frequency', 10, 20, 5, 10, 15, 30, 5, 5]
];
$sheet->fromArray($data, null, 'A1');
$dataseriesLabels = array(new PHPExcel_Chart_DataSeriesValues('String',
'sheet!$A$2', NULL, 1));
$xAxisTickValues = array(new PHPExcel_Chart_DataSeriesValues('String',
'sheet!$B$1:$I$1', NULL, 8));
$dataSeriesValues = array(new PHPExcel_Chart_DataSeriesValues('String',
'sheet!$B$2:$I$2', NULL, 8));
$series = new PHPExcel_Chart_DataSeries(
PHPExcel_Chart_DataSeries::TYPE_RADARCHART,
null,
range(0, count($dataSeriesValues)-1),
$dataseriesLabels,
$xAxisTickValues,
$dataSeriesValues,
null,
null,
PHPExcel_Chart_DataSeries::STYLE_MARKER
);
$plotarea = new PHPExcel_Chart_PlotArea(null, array($series));
$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_TOPRIGHT,
NULL, false);
$title = new PHPExcel_Chart_Title('Wind Rose Diagram');
$chart = new PHPExcel_Chart(
'chart1',
$title,
$legend,
$plotarea,
true,
0,
null,
null
);
$chart->setTopLeftPosition('A7');
$chart->setBottomRightPosition('I32');
$sheet->addChart($chart);
$ExcelWrite = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
$ExcelWrite->setIncludeCharts(true);
$ExcelWrite->save('D:TestRadarChart.xlsx');
如果Excel vba没问题,我可以显示它。
ActiveChart.Axes(xlCategory(.hasMajorGridlines=true
-
在 Excel 上选择目标图表。
-
在 excel 上按 Alt+F11,然后 VBE 打开。
-
在 VBE 上按 Ctrl+G,然后立即窗口打开。
-
粘贴上面的代码。
-
将光标放在代码行上,然后按回车键。
我用PHPExcel制作了文件,并用excel 2010编辑了它。
副作用,但也许可以修复它。
我用 PHPExcel 1.8.0 确认了。
源:
Lib/PHPExcel/Classes/PHPExcel/Writer/Excel2007/Chart.php(450)
以前:
$objWriter->startElement('c:axPos');
$objWriter->writeAttribute('val', "b");
$objWriter->endElement();
后:
$objWriter->startElement('c:axPos');
$objWriter->writeAttribute('val', "b");
$objWriter->endElement();
$objWriter->startElement('c:majorGridlines'); //added
$objWriter->endElement(); //added