関連
【ぇ、使えるの!?】PHPExcel+マクロでグラフ付きExcelを出力
PHPExcelでゼロからグラフを書いてみよう の続き
Excel_Reviserが終了し、xlsしか出力できないので、
xlsxで出力したい場合、PHPでExcelをいじる場合はPHPExcelを使うしかない。
PHPExcelでグラフを出力するための備忘録。
目指すは折れ線グラフ
PHPExcelバージョン:1.8.1
Excel:2013
PHP:5.5.27
考えられるパターン
- テンプレートファイル使わない
- テンプレートファイルを使う -> グラフをあらかじめ埋め込んでいるもの
- テンプレートファイルを使う -> マクロ埋め込み
今回は上記の**「2. テンプレートファイルを使う -> グラフをあらかじめ埋め込んでいるもの 」**で行ってみましょう。
流れ
- テンプレートとなるグラフ付きのExcelファイルをPHPExcelで読み込む
- グラフのデータとなる表にPHPExcelで値を埋める
- PHPExcelで出力
テンプレートの作成
完成。笑
サンプルコード
こちらはCakePHP2.xで書いているので、Cakeなところが残っていたらごめんなさい。
完成図
コード
大事なキーワードが$objReader->setIncludeCharts(TRUE);
public function getReportFromTemplate()
{
//PHPExelオブジェクトの作成
$objPHPExcel = new PHPExcel();
//テンプレートファイルのパス
$filepath = '/var/www/html/aems/app/tmp/excel/template.xlsx';
//PHPExcelのリーダー
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
/********大事:読み込むファイルにグラフが含まれていることを宣言********/
$objReader->setIncludeCharts(TRUE);
/*****************************************************************/
//読み込み
$objPHPExcel = $objReader->load($filepath);
//一枚目のシートを選択
$objWorksheet = $objPHPExcel->getActiveSheet(0);
$values=[
[372,102],
[296,82],
[700,192],
[112,774],
[829,430],
[872,387],
[884,342],
[501,90],
[203,116],
[891,364],
[983,334],
[100,318],
];
//配列の値を「I4」からExcelに埋めていく
$objWorksheet->fromArray($values, null, 'I5');
/********Excelファイル書き出し処理********/
//Excelファイルの名前
$fname = 'chartFromTemplate.xlsx';
//ファイルのサーバでの保存先
$fpath = '/var/www/html/aems/app/tmp/'.$fname;
// Excel書き出し用のオブジェクトを作成_Excelのバージョンを指定
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//書き出すExcelにグラフが含まれていると宣言
$objWriter->setIncludeCharts(TRUE);
//サーバ内に保存
$objWriter->save($fpath);
// 該当ファイルをHeaderに書き出し
header('Content-Type: application/force-download');
header('Content-Length: '.filesize($fpath));
header('Content-disposition: attachment; filename="'.$fname.'"');
readfile($fpath);
/************************************/
}
注意点
完成図を見て分かるように、グラフのレイアウトがリッチではなくなります。
また、おそらく色々試しているとこんなアラートにたくさん出会ってしまいます。
恐怖のアラート
そして、Excelを開いてみるとグラフがなくなっている、グラフが壊れていると思います。
これは、PHPExcelが読み込める(書き出せる)XML以上のグラフの描画をテンプレートにしている場合におきてしまいます。(タブン
エラーとなるパターンはいろいろありますが、一番よく起きそうなのが、テンプレートグラフを以下のように作っていた場合。
その他
- y軸を2種類設定していた場合は、2つ目は消し飛ぶ
- 細かい設定はほぼ消え去る
などなど
テンプレートから出力する場合は簡単なものしかできないご様子。
ここまでしかできないのかなぁ。(タブン)