使用PHP spreadsheet包导出至.xlsx文件,一次性循环万级的数据就容易内存溢出,有没有什么比较靠谱的导出方案呢?
提供个思路:
ini_set('memory_limit', '1024M');
excel
可以导出为 xml
文件,反过来也可以打开 xml
文件;xml
文件实现导出十万数据;xml
文件头 + 遍历数据分批写入文件(数据可以增量从数据库读取) + 文件尾。咱们打开一下思路,或许可以让前端来把几个csv分别下载之后,通过前端来合并成出excel文件,不但能减少后端阻塞、网络阻塞,还把相当一部分内存压力转给用户的客户端。
希望能帮助到你。
换个库把 比如box/spout https://opensource.box.com/sp...
Spout is a PHP library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way. Unlike other file readers or writers, it is capable of processing very large files, while keeping the memory usage really low (less than 3MB).
亲测导出导入10w+行xlsx没啥问题
4 回答13.2k 阅读✓ 已解决
5 回答7.7k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
1 回答950 阅读✓ 已解决
1 回答1.4k 阅读
1 回答1.4k 阅读
2 回答992 阅读
首先提问一问题。导出数据为什么要用xlsx格式。如果你不需要合并表格,然后表格有富文本的话。
那么你可以考虑导出为
csv
csv导出可以采取
追加写到文件
。Excel却不行,它只能写到内存,一次性输出。