【PHP】PHPExcelでグラフを一から作る方法

  • 2017年12月27日
  • 2017年12月27日
  • PHP

昨日もPHPExcelについての記事を書きましたが、本日も引き続き同じネタについてまとめ。
当初はグラフ入りテンプレートを使ってグラフを描写する予定でしたが、思っていた以上に「複雑なグラフ」のボーダーラインが低く、どうしても作りたいグラフが消されてしまうので、プログラムでグラフ作成をすることにしました。

 

ライブラリ導入から、現在のシート選択の部分は割愛します。
やっていることは意外と単純で、まず、グラフの表示範囲や参照先のセルを指定します。

//グラフ描画設定
$options = [
    'title' => 'グラフタイトル',
    'topPos' => 'A3',   //描画するグラフの左上の位置
    'bottomPos' => 'I24',   //描画するグラフの右下の位置
    'labelPos1' => $sheet.'!$B$2',  //グラフのデータラベル
    'xAxisRange' => $sheet.'!$A$3:$A$12',   //グラフのx軸の値の範囲
    'dataValueRange1' => $sheet.'!$B$3:$B$12'  //実際のデータ範囲
];
なお、$sheet は、現在アクティブなエクセルのシートを指定します。

実際にグラフを書いているのは下記のコード。

// グラフのデータラベル設定
$dataSeriesLabels = [
    new PHPExcel_Chart_DataSeriesValues('String', $options['labelPos1'], null, 1)
];

// グラフのX軸項目設定
$xAxisTickValues = [
    new PHPExcel_Chart_DataSeriesValues('String', $options['xAxisRange'], null, 10)
];

// グラフの系列設定
$dataSeriesValues = [
    new PHPExcel_Chart_DataSeriesValues('Number', $options['dataValueRange1'], null, 10)
];

//  グラフ描画設定
$series1 = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_BARCHART,               // 横棒グラフ
    PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED,          // plotGrouping
    range(0, count($dataSeriesValues)-1),                  // plotOrder
    $dataSeriesLabels,                                     // plotLabel
    $xAxisTickValues,                                      // plotCategory
    $dataSeriesValues                                      // plotValues
);
$series1->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_BAR);

//  プロットエリアの設定
$plotarea1 = new PHPExcel_Chart_PlotArea(null, [$series1]);
//  グラフ内での凡例のポジション設定
$legend1 = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_BOTTOM, null, false);
//  y軸のラベル設定
$yAxisLabel1 = new PHPExcel_Chart_Title('');
//  タイトルがある場合、タイトルの設定
$title1 = new PHPExcel_Chart_Title($options['title']);

//  グラフ作成
$chart1 = new PHPExcel_Chart('chart1',       // グラフの名前
                             $title1,        // グラフタイトル
                             $legend1,       // 凡例
                             $plotarea1,     // グラフのプロットエリア
                             false,           // 表示されているセルだけをプロット
                             0,              // 空白セルをどうするか
                             null,           // x軸のラベル
                             null            // y軸のラベル
);

//  グラフがワークシートのどこに描画されるかの設定
$chart1->setTopLeftPosition($options['topPos']);
$chart1->setBottomRightPosition($options['bottomPos']);

//ワークシートにグラフの追加
$objWorksheet->addChart($chart1);

こちらのコードでは横棒グラフを作成しています。
表示位置やタイトルを任意で決められるので、なかなか自由度は高めですね。

 

作成できるグラフの種類も豊富で、棒グラフ以外にも、折れ線グラフやレーダーチャート、あとは設定名的に察するに、バブルチャートなんかも使えそうでした。
…が、よく使うのは棒グラフ・折れ線グラフ・円グラフぐらいかな。

便利&簡単なPHPExcelですが、若干ハマっている箇所もあり、どうしても縦軸の項目名とグラフの凡例が正しく表示されません…。
データ自体は指定してあるので、設定が間違っているのだと思っています。
もし、この不具合がわかる方いらっしゃいましたら、どうぞコメントでご指摘をお願い致します。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG