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