2013-10-15 46 views
1

我在PHPExcel中的y轴标签定位有问题。PHPExcel - Y轴重叠数据chartarea

当我创建图表中,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轴?或者有什么方法可以改变源数据,使其自动选择正确的交叉点?

enter image description here 编辑:A“可能”替代方法可能是简单地设定y轴线颜色为“无线”,并且y轴标签显示为“低”,而不是“下一步以”,然而,我不要以为PHPExcel能够在这一点上改变轴线颜色设置。还是呢?

回答

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轴现在“出现”处于正确的位置。

enter image description here

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

+0

谢谢!这固定了y轴!与移动x轴类似,我们也可以做类似的改变 – ken

4

PHPExcel/Classes/Writer/Excel2007/Chart中的PHPExcel版本中至少存在一个错误。PHP

查找:

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(); 

轴应该然后是正确的。