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