1

PHPExcel の y 軸ラベルの配置に問題があります。

グラフを作成すると、y 軸のラベルがプロット エリアの左側に表示されず、常にプロット エリアに重なっていて、0 ではなくカテゴリ 4 から始まります。

この問題は、カテゴリの 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 には、少なくとも PHPExcel/Classes/Writer/Excel2007/Chart.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();

軸は正しいはずです。

于 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 に答える