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件のコメント