1

我在 PHPExcel 中的 y 轴标签定位有问题。

当我创建图表时,y 轴标签不会出现在绘图区域的左侧,它们总是与绘图区域重叠,从类别 4 而不是 0 开始。

我假设问题是由我的类别 x 轴值引起的,而 Excel 无法确定相对于数据放置 y 轴的位置。我的类别(x 轴)值是字符串形式:

yyyy, i.e. 1980 1981 1982 1983 etc.

这是我的 PHPExcel 图表创建代码,除了 y 轴定位外,所有代码都可以工作。

$labels = array(
    new PHPExcel_Chart_DataSeriesValues('String', "'Report Summary'!C1", null, 1),
    new PHPExcel_Chart_DataSeriesValues('String', "'Report Summary'!D1", null, 1)
);
$chrtCols = "'Report Summary'!B2:B$rowNum";
$chrtVals = "'Report Summary'!C2:C$rowNum";
$chrtVals2 = "'Report Summary'!D2:D$rowNum";
$periods = new PHPExcel_Chart_DataSeriesValues('Number', $chrtCols, null, $rowNum-1);
$values = new PHPExcel_Chart_DataSeriesValues('Number', $chrtVals, null, $rowNum-1);
$values2 = new PHPExcel_Chart_DataSeriesValues('Number', $chrtVals2, null, $rowNum-1);
$series = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_AREACHART,       // plotType
    PHPExcel_Chart_DataSeries::GROUPING_STANDARD,  // plotGrouping
    array(0,1),                                       // plotOrder
    $labels,                                        // plotLabel
    array($periods,$periods),                                // plotCategory
    array($values,$values2)                                  // plotValues
);
$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
$layout = new PHPExcel_Chart_Layout();

$plotarea = new PHPExcel_Chart_PlotArea($layout, array($series));
$chart = new PHPExcel_Chart('sample', null, null, $plotarea);
$chart->setTopLeftPosition('A1', 24, 24);
$chart->setBottomRightPosition('B18', -24);
$actSheet->addChart($chart);

是否有设置告诉 y 轴在类别 0 处穿过 x 轴,而不是自动选择错误的交点?或者有没有办法可以改变源数据以使其自动选择正确的交叉点?

在此处输入图像描述 编辑:“可能”的解决方法可能是简单地将 y 轴线颜色设置为“无线”,并将 y 轴标签显示为“低”而不是“nextTo”,但是,我认为 PHPExcel 没有此时可以更改轴线颜色设置。或者是吗?

4

2 回答 2

5

至少在我的 PHPExcel/Classes/Writer/Excel2007/Chart.php 中的 PHPExcel 版本中有一个错误

寻找:

if ($id1 > 0) {
    $objWriter->startElement('c:crossAx');
        $objWriter->writeAttribute('val', $id2);
    $objWriter->endElement();

并将 $id2 更改为 $id1:

if ($id1 > 0) {
    $objWriter->startElement('c:crossAx');
        $objWriter->writeAttribute('val', $id1);
    $objWriter->endElement();

那么轴应该是正确的。

于 2014-02-06T16:47:04.367 回答
3

我仍然很不确定为什么我的 y 轴没有出现在绘图区域的左侧,并且很乐意学习正确解决我的问题而不是简单地解决它,但是,以启用上述解决方法,我对代码进行了一些更改:

PHPExcel/Classes/Writer/Excel2007/Chart.php  

第 541 行之后:

$objWriter->startElement('c:valAx');

我补充说:

$objWriter->startElement('c:spPr');
    $objWriter->startElement('a:ln');
        $objWriter->startElement('a:noFill');
        $objWriter->endElement();
    $objWriter->endElement();
$objWriter->endElement();

删除了 y 轴边框。然后我将第 616ish-620ish 行从:

$objWriter->startElement('c:tickLblPos');
    $objWriter->writeAttribute('val',"nextTo");
$objWriter->endElement();

至:

$objWriter->startElement('c:tickLblPos');
    $objWriter->writeAttribute('val', "low");
$objWriter->endElement();

将 y 轴重新定位到绘图区域的左侧。

虽然这并不能解决轴没有出现在应有的位置的初始问题,但正如您在对 chart.php 实施更改后附在图表下方的图像中看到的那样,y 轴现在“似乎”在正确的位置。

在此处输入图像描述

PS。此解决方法将影响使用相同 chart.php 文件的所有图表,将 y 轴标签位置更改为“低”并删除 y 轴线。

于 2013-10-16T04:41:08.477 回答