V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1a7498
V2EX  ›  PHP

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

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

    百度搜索大致是分割然后循环输出压缩到一个文件输出浏览器,但是具体实现都会出错,刚刚学 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   ·   实用小工具   ·   2686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:19 · PVG 23:19 · LAX 07:19 · JFK 10:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.