有个需求,用PHP生成EXCEL,数据量有30万行。用SpreadSheet肯定是不行了。
最后用的PHP的扩展,xlswriter。
官方网址
https://xlswriter-docs.viest.me/zh-cn/an-zhuang/pecl-tui-jian
首先安装扩展
pecl install xlswriter
# 添加 extension = xlswriter.so 到 ini 配置
如果pecl安装不成功,可以选用源码安装。可以去官网查阅,这里不必再表。
然后PHP中调运的代码如下:
$config = [ 'path' => $this->filePath // xlsx文件保存路径 ]; $excel = new \Vtiful\Kernel\Excel($config);
注意,由于数据量有30万之多,所以我每次都是读取1万行来保存,防止每次读取的数据过多导致内存不足,代码如下
if($offset ==0){ //第一次新建文件 $filePath = $excel->fileName($tableName . '.xlsx', 'Sheet1') ->header($title) ->data($excelData) ->output(); }else{ //之后只需要往直前的文件追加即可 $excel->openFile($tableName . '.xlsx') ->openSheet('Sheet1')->setSkipRows($offset)->data($excelData) ->output(); } $offset += $limit;
经过测试,30万行数据保存完只需要10秒左右,速度很快。