请问导出大量数据 Excel 内存溢出该如何解决呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1a7498
V2EX    PHP

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

  •  
  •   1a7498 2018-08-04 11:57:08 +08:00 6845 次点击
    这是一个创建于 2639 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    20 条回复    2018-08-07 17:00:45 +08:00
    leo9960
        2
    leo9960  
       2018-08-04 12:18:57 +08:00 via Android
    调高内存限制
    f2f2f
        3
    f2f2f  
       2018-08-04 12:35:26 +08:00
    目测你是 32 位 Office
    CHEN1016
        4
    CHEN1016  
       2018-08-04 13:16:54 +08:00 via Android
    本来想说 poi 的,一看是 php...
    ccc008
        5
    ccc008  
       2018-08-04 13:20:45 +08:00 via iPhone
    导出大量数据的话用 csv 格式吧
    Rekkles
        6
    Rekkles  
       2018-08-04 13:25:04 +08:00
    https://github.com/justcodingnobb/EasyExcel 自己造过轮子 有点方 不过内存溢出可以解决
    anyforever
        7
    anyforever  
       2018-08-04 13:41:44 +08:00 via iPhone
    yeild 了解一下
    1a7498
        8
    1a7498  
    OP
       2018-08-04 13:56:36 +08:00
    @ccc008 csv 也很大,一天大概 100w 条数据
    1a7498
        9
    1a7498  
    OP
       2018-08-04 13:57:34 +08:00
    @anyforever 这个是 Python 的吗
    anyforever
        10
    anyforever  
       2018-08-04 13:58:19 +08:00 via iPhone
    @1a7498 PHP 也有了啊
    nl101531
        11
    nl101531  
       2018-08-04 14:09:40 +08:00 via Android
    按照 poi 里面大量导出的思路是内存中存放少量的数据,然后边写边释放已写入的内存,类似一个滑动窗口。
    luban
        12
    luban  
       2018-08-04 14:49:19 +08:00
    两种思路,
    csv 虽然文件大,但是可以一行一行读
    还是 excel 的话, Java 里 poi 对于大文件的思路是解压缩(excel 本身是压缩的), 解析里面需要的 xml 文件
    bombless
        13
    bombless  
       2018-08-04 15:02:10 +08:00 via Android
    可以让客户端去生成,服务端提供数据
    annielong
        14
    annielong  
       2018-08-04 18:03:43 +08:00
    要求不严的话用兼容标签试试看,使用 html 格式生成文件,后缀名改成 xls
    JimGee
        15
    JimGee  
       2018-08-04 19:18:57 +08:00
    @1a7498 楼主你用的 PHPExcel 的吗? PHPExcel_Writer 了解一下。
    JimGee
        16
    JimGee  
       2018-08-04 19:21:36 +08:00
    @1a7498 写错了,是 PHP_XLSXWriter
    4ier
        17
    4ier  
       2018-08-05 11:24:06 +08:00
    分页,每次内存中只保存一页数据(但是数据必须简单有序,如果要做到跨页之间的依赖或者乱序就比较麻烦)
    qiuqiuer
        18
    qiuqiuer  
       2018-08-05 19:31:08 +08:00 via Android
    如果之后看的话用 e 编辑器或者 u 编辑器就行啊
    marsberrys
        19
    marsberrys  
       2018-08-06 04:45:08 +08:00 via iPhone
    导 csv 吧,一般导数据表 csv 用 Excel 打开跟 Excel 没啥区别。分页写入就行了
    liluoao1
        20
    liluoao1  
       2018-08-07 17:00:45 +08:00
    我觉得 yield 很好啊,http://php.net/manual/zh/language.generators.syntax.php
    当然换 csv 也行
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2775 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:45 PVG 14:45 LAX 23:45 JFK 02:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86