PHPでExcel出力の要件があり、PhpSpreadsheet を使用して10万件ほどのレコードを出力しようしたのだが
1時間たっても終了しません・・・。

ソースを見たところ、全てのデータをチェックして、文字列なのか数値なのかなどをチェックして
セルのフォーマットを決めているのでここで時間がかかってんのかなと思った。

これでは、要望を満たせないので、Githubで検索。

するとPHP_XLSXWriterを発見。
https://github.com/mk-j/PHP_XLSXWriter

100000行を2.7sで出力、メモリーが0MBだと!!

うさんくさいけど試してみました。

はったりじゃなかった!!!

10万件のレコードを約10秒ほどで出力できた。
サンプルの実行速度と違うのはカラムの数の所為だろう

もともとCSV出力していたのを顧客の要望でExcelで出したいとのことで
レスポンスも問題ないのでPHP_XLSXWriterを採用することにしました。

CodeIgniterでのライブラリサンプル

include_once(APPPATH."third_party/xlsxwriter.class.php");

class Excel {
    public function output($data, $filenm, $file_path)
    {
        // セルフォーマット設定 ※ここでセルのフォーマット全てを文字列とする設定の配列を作成
        $col_count = count($data[0]);
        $i = 0;
        while($i < $col_count) {
            $header[] = "string";
            ++$i;
        }
        
        $writer = new XLSXWriter();
        $writer->writeSheetHeader('Sheet1', $header, ['suppress_row'=>true]);
        $writer->writeSheet($data);
        $writer->writeToFile($file_path.'/'.$filenm);
    }
}

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です