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