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行のデータが追加されたことが分かります。
 
  
コメント