PHPExcel雷达图主轴缺失



我想用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

  1. 在 Excel 上选择目标图表。

  2. 在 excel 上按 Alt+F11,然后 VBE 打开。

  3. 在 VBE 上按 Ctrl+G,然后立即窗口打开。

  4. 粘贴上面的代码。

  5. 将光标放在代码行上,然后按回车键。

我用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

最新更新