Excelテンプレートに値を書き込めるPHP用ライブラリ「php-excel-templator」



元となるExcelファイルにデータを書き込むPHP用のライブラリ「php-excel-templator」の紹介です。

業務システムの開発となると、Excelファイルを扱うことは珍しいことではありません。

データをExcelファイルにデータを書き込むことは難しいことではありませんが、アライン(中心に揃える)や フォントなどの スタイルを指定するとなると処理が複雑になってきます。

そんな複雑な処理を "テンプレートとなるExcelファイル" を元にしてデータを書き込むことが出来るユニークなPHP用のライブラリが「php-excel-templator」です。

php-excel-templator で出来ること 

- テンプレートとなるExcelに、データを書き込むことが出来ます

* php-excel-templator 公式レポジトリから


php-excel-templator のインストール

php-excel-templatorは ' composer ' を使ってプロジェクトにインストールします。なお、導入されているPHPのバージョンが ' 5.4以上 ' 以上である必要があります。

composer require alhimik1986/php-excel-templator

 

php-excel-templator の使い方

php-excel-templatorの使い方はユニークで、テンプレートとなるExcelテンプレートに専用の変数を渡すことでデータを書き込むことが出来ます。

例えば下記のExcelテンプレート内の " { 変数名 } " で囲まれている部分に値を書き込む場合は下記のようなコードになります。
* 今回の場合は "{ current_date }" と '' { department } "

* ベースになるExcelテンプレート

// ライブラリの読み込み
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',
]);
*/

* ベーステンプレートのExcelにデータを書き込み 

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);

* 上のスニペットで生成されたExcelファイル


Summary

php-exel-templatorは外ライブリに見られるような " Excelファイルを1から生成する "方法ではなく、既存のExcelファイルを利用しつつデータを書き込む事が出来るのが特徴です。

細かいスタイルを指定したExcelファイルを生成する機能を実装したい時は、予め Excel側でスタイルやフォーマットを指定したテンプレートをそのまま利用できるので、開発工程が大幅に削れそうです。

GitHub : alhimik1986/php-excel-templator

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ