忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP Spoutを使用してエクセル出力を行う方法について(Spoutをcomposerでインストール)

PHP でのエクセル出力では PHPExcelPhpSpreadsheet で行う記事は投稿しましたが、 Spout というライブラリも存在する様です。

SpoutPhpSpreadsheet の様に重装備な感じでは無く、軽い仕様になっていている様です。
また、 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"
        }
    }
}

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












PR

コメント

コメントを書く