[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
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行のデータが追加されたことが分かります。
コメント