2013-10-15 44 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(); 

軸應該然後是正確的。