PHPExcel雷达图主轴缺失

时间:2017-06-23 07:07:19

标签: phpexcel radar-chart

我想使用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');

2 个答案:

答案 0 :(得分:0)

如果Excel vba正常,我可以显示它。

  

ActiveChart.Axes(xlCategory).hasMajorGridlines =真

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

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

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

  4. 粘贴上面的代码。

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

  6. 我使用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