以前、「【PHP】PHPExcelを使うときにセルの書式設定を変更する方法」という記事を投稿しましたが、本日の記事は、またこの PHPExcel について。
今回は、PHPExcelでテンプレートファイルを使う際に、グラフが入っていた場合の処理についてまとめです。
今回参考にした投稿はこちら。
PHPExcelでテンプレートファイルからグラフを作ってみよう – Qiita
https://qiita.com/tutida/items/2d163ed7662bb499a082
やりたいことがすべて書いてありました…!
早速、コードを書いていきますが、PHPExcelオブジェクト生成から、シートの選択まではこんな感じ
// PHPExcelオブジェクトを生成する $book = new PHPExcel(); $objReader = PHPExcel_IOFactory::createReader('Excel2007'); // 読み込むテンプレートファイルにグラフが含まれていることを宣言 $objReader->setIncludeCharts(TRUE); // テンプレート読み込み $book = $objReader->load('テンプレートのエクセルファイルのパス'); $book->setActiveSheetIndex(0); // カレントシート選択 $sheet = $book->getActiveSheet();
上記のコードで重要なのは、5行目の「読み込むテンプレートファイルにグラフが含まれていることを宣言する」、という
$objReader->setIncludeCharts(TRUE);
上記の記述です。
この一行を入れないと、読み込んだテンプレートファイルからグラフが消えてしまいます。
また、読み込み時だけでなく、下記のようにエクセルファイルの出力・保存の時にも同じ記述を入れる必要があります。
// ファイル名 $filename = 'PHPExcel-sample.xlsx'; $writer = PHPExcel_IOFactory::createWriter($book, 'Excel2007'); // 書き出すエクセルファイルにグラフが含まれていることを宣言 $writer->setIncludeCharts(TRUE); $writer->save("/tmp/".$file); File::download("/tmp/".$file, $file);
こんな感じ。
出力時にも、エクセルファイルにグラフが含まれていることを宣言する5行目の記述を必ず入れましょう。
ただ、グラフを扱う際には注意が必要で、あまり複雑な指定をすると、グラフが含まれていることを宣言していてもグラフが消える場合があります。
現に、私もそれで悩まされています。
グラフ入りのテンプレートを入れる場合は、極力簡単でシンプルなものを使うようにしましょう。
なお、グラフが消える・簡略化される条件は下記のようなものがあげられるとのこと。
- X軸を設定している
- Y軸を2種類設定している場合、2つ目は消える
- 詳細な設定はほぼ消える
…かなり簡単なものしか扱えなさそうですね。
これならいっそ、テンプレートから読み込まず、PHPExcelでグラフを作成したほうがいいかもしれません。
ゼロからグラフを作成する方法については、冒頭で挙げた投稿を書かれた方が記事を挙げているので、こちらが参考になるかと思います。
PHPExcelでゼロからグラフを書いてみよう – Qiita
https://qiita.com/tutida/items/643baa8832beedd53499