今回は PhpSpreadsheet\Chart で「Bar Chart:棒グラフ」が作成されているエクセルファイルを読み込み、 そのチャートが参照している系列データ部分を別のデータで書き変えを行う方法を説明します。 
おおまかな手順は以下の様になります。
- PhpSpreadsheet\IOFactory クラスの createReader メソッドで読込みオブジェクトを生成し、エクセルファイルの読込。 (この時 setIncludeCharts(TRUE) メソッドでチャートの存在を指定する)
- ワークシートの fromArray メソッドで系列データを設定。
- PhpSpreadsheet\IOFactory クラスの createWriter メソッドで書込みオブジェクトを生成し、エクセルファイルの書込。 (この時 setIncludeCharts(TRUE) メソッドでチャートの存在を指定する)
以下の記事のエクセルファイルを元にします。 
⇒PHP PhpSpreadsheet\Chart ワークシート上にチャート(Bar Chart:棒グラフ)を作成する方法について 
元となるエクセルファイル[test-g-2-1.xlsx]は以下の様になっています。
■ワークシートにチャートが存在するエクセルファイル(テンプレート)の系列データ部分を変更し別のファイルとして登録
<?php
//  ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
//  エクセルファイル読込オブジェクト
$objReader = IOFactory::createReader('Xlsx');
$objReader->setIncludeCharts(TRUE);
//  PHPExcelオブジェクト取得
$objSpreadsheet = $objReader->load("test-g-2-1.xlsx");
//  ワークシートオブジェクト取得
$objWorksheet = $objSpreadsheet->getActiveSheet();
//  チャート用テストデータ上書
$objWorksheet->fromArray(
	array(
		array(      22,      38,      19),
		array(      25,      49,      20),
		array(      31,      33,      25),
		array(      28,      44,      42),
		array(      40,      31,      13),
	),
	NULL,
	'B2'
);
//  エクセルファイル書込オブジェクト
$objWriter = IOFactory::createWriter($objSpreadsheet, 'Xlsx');
$objWriter->setIncludeCharts(TRUE);
//  エクセルファイル書込
$objWriter->save('test-g-7-1.xlsx');
exit();
?>
出力されたエクセルファイル[test-g-7-1.xlsx]を見てみると以下の様になります。
チャートが参照している系列データを変更すれば、表示されるチャートのグラフは違ったものになります。 
このことを利用すれば、テンプレートのエクセルファイルとしてチャート含んだものを登録しておき、 データ部だけを変えるだけで異なるエクセルファイルを出力することができます。 
PR
 
  
コメント