PHP でのエクセル出力では PHPExcel や PhpSpreadsheet で行う記事は投稿しましたが、 Spout というライブラリも存在する様です。
Spout は PhpSpreadsheet の様に重装備な感じでは無く、軽い仕様になっていている様です。
また、 PhpSpreadsheet では内部でデータを全て展開して持つ様なので、エクセルの行数が非常に多い場合は 処理メモリの容量が大きくなってくるので、その時は Spout が使えるかもしれません。
PhpSpreadsheet では以下の記事で composer を使用してのインストールを行いましたが、今回も同様に composer でのインストールについて説明したいと思います。
⇒PHP PhpSpreadsheet のインストールについて(XAMPPでのPhpSpreadsheetのインストールその2:composerでPhpSpreadsheet)
■Spout のサイトについて
Spout のサイトについては以下が本家なので、ドキュメントなどはこちらを参照して下さい。
尚、ページの先頭の「Getting Started」のリンクをクリックするとインストール方法が記載されています。
その内容に従ってインストールを行いました。
■Composer による Spout のインストール
上記のコマンドに引き続いて Spout のインストールをするために以下のコマンドを実行します。
composer require box/spout
実際の実行結果は以下の様になります。
C:\xampp\htdocs>composer require box/spout Info from https://repo.packagist.org: #StandWithUkraine Using version ^3.3 for box/spout ./composer.json has been updated Running composer update box/spout Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking box/spout (v3.3.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Downloading box/spout (v3.3.0) - Installing box/spout (v3.3.0): Extracting archive 1 package suggestions were added by new dependencies, use `composer suggest` to see details. Package box/spout is abandoned, you should avoid using it. No replacement was suggested. Generating autoload files 8 packages you are using are looking for funding. Use the `composer fund` command to find out more! No security vulnerability advisories found
このコマンドの結果「composer.json」は以下の様になります。
{
"require": {
"phpoffice/phpspreadsheet": "^1.8"
"box/spout": "^3.3"
},
"config": {
"platform": {
"php": "7.4.32"
}
}
}
尚 Spout は PHP7.2 以上が要求されますので、バージョンを PhpSpreadsheet の時よりアップしました。
これで Spout が利用できる様になりましたので、簡単な例を以下に示します。
■Spout による簡単な例
それでは Spout による簡単な例を示します。
最初に Spout ライブラリの読み込みを行うため、 上記で Spout のインストールしたディレクトリの中の「/vendor/autoload.php」をインクルードします。
尚、ソースが存在するディレクトリは Spout のインストールしたディレクトリより1個階層が下なので
「require '../vendor/autoload.php';」となります。
更に「use」キーワードでライブラリのクラス名のエイリアスを指定します。
エクセルの出力処理は最初に、XLSX書込クラス生成を生成し、出力ファイル名を指定します。
その後でセルデータを宣言して、データ行として3行分追加し、ファイル出力を行います
処理的には直感的に分かりやすいと思います。
<?php
// ライブラリ読込
require '../vendor/autoload.php';
// 利用クラスエイリアス
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
// XLSX書込クラス生成
$writer = WriterEntityFactory::createXLSXWriter();
// 書込みファイル指定
$writer->openToFile('test.xlsx');
// セルデータ
$cells = [
WriterEntityFactory::createCell('A001'),
WriterEntityFactory::createCell('B002'),
WriterEntityFactory::createCell('C003'),
];
// 行データ
$singleRow = WriterEntityFactory::createRow($cells);
// 行データを3行追加
$writer->addRow($singleRow);
$writer->addRow($singleRow);
$writer->addRow($singleRow);
// エクセルファイルの書込
$writer->close();
?>
出力されたエクセルファイルを見てみると以下の様になります。
同じ内容ですが、3行のデータが追加されたことが分かります。
コメント