请问导出大量数据 Excel 内存溢出该如何解决呢?

2018-08-04 11:57:08 +08:00
 1a7498

百度搜索大致是分割然后循环输出压缩到一个文件输出浏览器,但是具体实现都会出错,刚刚学 php 两个月,望各位大哥指导一下,谢谢ヾ(o◕∀◕)ノヾ

6321 次点击
所在节点    PHP
20 条回复
hanchengluo
2018-08-04 12:17:32 +08:00
超一万条就容易出错,调一下 php.ini 里的 max 值
leo9960
2018-08-04 12:18:57 +08:00
调高内存限制
f2f2f
2018-08-04 12:35:26 +08:00
目测你是 32 位 Office
CHEN1016
2018-08-04 13:16:54 +08:00
本来想说 poi 的,一看是 php...
ccc008
2018-08-04 13:20:45 +08:00
导出大量数据的话用 csv 格式吧
Rekkles
2018-08-04 13:25:04 +08:00
https://github.com/justcodingnobb/EasyExcel 自己造过轮子 有点方 不过内存溢出可以解决
anyforever
2018-08-04 13:41:44 +08:00
yeild 了解一下
1a7498
2018-08-04 13:56:36 +08:00
@ccc008 csv 也很大,一天大概 100w 条数据
1a7498
2018-08-04 13:57:34 +08:00
@anyforever 这个是 Python 的吗
anyforever
2018-08-04 13:58:19 +08:00
@1a7498 PHP 也有了啊
nl101531
2018-08-04 14:09:40 +08:00
按照 poi 里面大量导出的思路是内存中存放少量的数据,然后边写边释放已写入的内存,类似一个滑动窗口。
luban
2018-08-04 14:49:19 +08:00
两种思路,
csv 虽然文件大,但是可以一行一行读
还是 excel 的话, Java 里 poi 对于大文件的思路是解压缩(excel 本身是压缩的), 解析里面需要的 xml 文件
bombless
2018-08-04 15:02:10 +08:00
可以让客户端去生成,服务端提供数据
annielong
2018-08-04 18:03:43 +08:00
要求不严的话用兼容标签试试看,使用 html 格式生成文件,后缀名改成 xls
JimGee
2018-08-04 19:18:57 +08:00
@1a7498 楼主你用的 PHPExcel 的吗? PHPExcel_Writer 了解一下。
JimGee
2018-08-04 19:21:36 +08:00
@1a7498 写错了,是 PHP_XLSXWriter 😂
4ier
2018-08-05 11:24:06 +08:00
分页,每次内存中只保存一页数据(但是数据必须简单有序,如果要做到跨页之间的依赖或者乱序就比较麻烦)
qiuqiuer
2018-08-05 19:31:08 +08:00
如果之后看的话用 e 编辑器或者 u 编辑器就行啊
marsberrys
2018-08-06 04:45:08 +08:00
导 csv 吧,一般导数据表 csv 用 Excel 打开跟 Excel 没啥区别。分页写入就行了
liluoao1
2018-08-07 17:00:45 +08:00
我觉得 yield 很好啊,http://php.net/manual/zh/language.generators.syntax.php
当然换 csv 也行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX