我在PHPExcel中遇到y轴标签定位问题。
当我创建图表时,y轴标签不会出现在绘图区域的左侧,它们总是与绘图区域重叠,从类别4开始而不是0。
我假设问题是由我的category-x-axis值引起的,而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具有此时可以改变轴线颜色设置。或者是吗?
答案 0 :(得分: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();
然后轴应该是正确的。
答案 1 :(得分: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轴线。