我想使用phpexcel绘制雷达图表,但是当我使用Microsoft Excel 2010打开生成的文件时,图表的主轴缺失(如下图所示,第一个是错误的,第二个是正确的)。
The wrong chart draw by phpexcel
The correct chart draw by 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');
答案 0 :(得分:0)
如果Excel vba正常,我可以显示它。
ActiveChart.Axes(xlCategory).hasMajorGridlines =真
在Excel上选择目标图表。
在Excel上按 Alt + F11 ,然后打开VBE。
在VBE上按 Ctrl + G ,然后立即打开窗口。
粘贴上面的代码。
将光标放在代码行上,然后按确认键。
我使用PHPExcel创建了该文件,并使用excel 2010进行编辑。
答案 1 :(得分:0)
我不知道副作用,但可以修复它。
我使用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