PHPExcel - Y轴重叠数据图表区域

III*_*III 1 charts phpexcel

我在PHPExcel中遇到y轴标签定位问题.

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

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

yyyy, i.e. 1980 1981 1982 1983 etc.
Run Code Online (Sandbox Code Playgroud)

这是我的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);
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

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

找:

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

并将$ id2更改为$ id1:

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

然后轴应该是正确的.