元となるExcelファイルにデータを書き込むPHP用のライブラリ「php-excel-templator」の紹介です。
業務システムの開発となると、Excelファイルを扱うことは珍しいことではありません。
データをExcelファイルにデータを書き込むことは難しいことではありませんが、アライン(中心に揃える)や フォントなどの スタイルを指定するとなると処理が複雑になってきます。
そんな複雑な処理を "テンプレートとなるExcelファイル" を元にしてデータを書き込むことが出来るユニークなPHP用のライブラリが「php-excel-templator」です。
- テンプレートとなるExcelに、データを書き込むことが出来ます

php-excel-templatorは ' composer
' を使ってプロジェクトにインストールします。なお、導入されているPHPのバージョンが ' 5.4以上
' 以上である必要があります。
composer require alhimik1986/php-excel-templator
php-excel-templatorの使い方はユニークで、テンプレートとなるExcelテンプレートに専用の変数を渡すことでデータを書き込むことが出来ます。
例えば下記のExcelテンプレート内の " { 変数名 }
" で囲まれている部分に値を書き込む場合は下記のようなコードになります。
* 今回の場合は "{ current_date }
" と '' { department }
"

// ライブラリの読み込み
use alhimik1986\PhpExcelTemplator\PhpExcelTemplator;
$import = './template.xlsx'; // 元になるExcelファイル
$export = './exported_file.xlsx'; // 発行するExcelファイル名
// saveToFileメソッドでExcelファイルの保存
PhpExcelTemplator::saveToFile($import , $export, [
'{current_date}' => date('d-m-Y'), // ' current_data ' に日付データを書き込み
'{department}' => 'Sales department', // ' department 'に書き込み
]);
/*
// outpuToFileで直接Excelファイルをダウンロードさせる事ができます
PhpExcelTemplator::outputToFile($import, $export, [
'{current_date}' => date('d-m-Y'),
'{department}' => 'Sales department',
]);
*/

php-excel-templator は Excel ファイル内ブラケット" { }
"などで囲われた変数名を参照して値を書き込むことが出来ます。
( * Smarty や Twigのテンプレート変数と同等のものと考えると理解しやすいかもしれません )
* 変数名のルール
- {var}
: 文字列
- [var]
: 縦に続く配列 ( 1次元配列 )
- [[var]]
: 横に続く配列 ( 2次元配列 )
PhpExcelTemplatorクラスのメソッドに ' 元となるテンプレート'、'保存するファイル名'、'書き込むデータ'を指定するだけでExcelファイルにデータを書き込むことができます。
また、テンプレートとなるExcelファイルに 色や太字などのスタイルが指定されていても、発行先のExcelファイに反映されます。
use alhimik1986\PhpExcelTemplator\PhpExcelTemplator; //ライブラリの読み込み
// サーバ内の保存
PhpExcelTemplator::saveToFile(ベースとなるExcelファイル, 保存するファイル名, 書き込むデータ);
// 直接ダウンロードさせる場合
PhpExcelTemplator::outputToFile(ベースとなるExcelファイル, 保存するファイル名, 書き込むデータ);
配列データの書き込み
続いては、下のエクセルテンプレートにデータを書き込むサンプルです。
" { current_time }
" には文字列型の日付、 " [ divisions ]
" には1次元配列で支店データを、 " [[ core_times ]]
, [[ sales ]]
", には2次元配列でデータを書き込みます。
元になるテンプレートには部分的に セルデータに色をつけたり、中央揃えにしていますが、発行データも問題なくスタイルが保持されます。

use alhimik1986\PhpExcelTemplator\PhpExcelTemplator;
$import = './base.xlsx';
$export = './result.xlsx';
// 書き込むデータ
$data = [
// 文字列型で
'{current_date}' => date('Y年m月d日'),
// [divisions]には1次元配列で
'[divisions]' => ['東京', '大阪'],
// [[core_times]]には 2次元配列で
'[[core_times]]' => [['9時', '10時', '11時', '12時', '13時', '14時', '15時', '16時', '17時', '18時']],
// [[sales]]には二次元配列で
'[[sales]]' => [
[58000, 110000, 140000, 230000, 180000, 60000, 85000, 109000, 142000, 98000],
[41000, 720000, 91000, 190000, 113000, 80000, 62000, 87000, 112000, 84000],
]
];
// excelファイルを発行
PhpExcelTemplator::saveToFile($import, $export, $data);
// 直接ダウンロードさせる場合
// PhpExcelTemplator::outputToFile($import, $export, $data);

php-exel-templatorは外ライブリに見られるような " Excelファイルを1から生成する "方法ではなく、既存のExcelファイルを利用しつつデータを書き込む事が出来るのが特徴です。
細かいスタイルを指定したExcelファイルを生成する機能を実装したい時は、予め Excel側でスタイルやフォーマットを指定したテンプレートをそのまま利用できるので、開発工程が大幅に削れそうです。
GitHub : alhimik1986/php-excel-templator