PHP 处理百万级 execl

203 天前
 test123abc
目前有个需求是导入两个百万级数据的 excel ,关联处理后导出新的 excel 。
我想先使用 box/spout 先读取,处理后导出,感觉会卡死,请问下大家有更好的办法吗。
2032 次点击
所在节点    程序员
18 条回复
lait123
203 天前
你可能需要 xlswriter: https://github.com/viest/php-ext-xlswriter
Mithril
203 天前
都搞到 SQLite 里,查出来再写 Excel 或者 CSV 。

如果不算高频操作,你甚至都不用写代码,找个 GUI 的客户端录个自动化脚本都行。
mumbler
203 天前
这种级别数据需要异步处理,excel 单表最多 100 万,超过会分到下一个 sheet
abccccabc
203 天前
导出的时候配合 layui-excel 试下,印象中说百万数据没问题,就看客户端的内存了。
sagaxu
203 天前
这种应该用 csv ,excel 不是好的选择
test123abc
203 天前
@Mithril 老哥能细说下吗,没了解过这些
test123abc
203 天前
@sagaxu 老哥能细说下吗😭
sagaxu
202 天前
@test123abc

excel 不适合的原因:

1. 最大行数 100 万行,百万级的数据量稍微再大点就超了
2. 超过 20 万行后,十分消耗资源,office 打开容易卡容易崩
3. 兼容性,csv 拥有最广泛的兼容性,各大 db 支持导出 csv ,excel 不如
4. 解析不方便,csv 按行处理不用库也很容易解析,excel 要先解压,有些库是一次性全部解压到内存。带公式带宏或者其它特殊信息的 excel 可能解析错误。
codebs
202 天前
xlswriter 可以满足你的需求,可以分表打包成压缩包下载
Mithril
202 天前
@test123abc 简单地说,就是不要用 Excel 去处理包含大量数据的复杂查询。
它就是个电子表格,那就让它做电子表格该做的事。想要把它当数据库用,那就找个数据库软件。

SQLite 就是个数据库,单文件,性能也不差。比起其他数据库,能更简单的运行起来,也有更多的软件支持。所以建议你先把数据搞到数据库里,然后用 SQL 做关联查询,结果再写出来。

Microsoft Access 也行,你自己会用哪个就选哪个。
8355
202 天前
chenshiforever
202 天前
要我来写,最简单的就是 js 读出来,保存在数组里面,关联处理了,保存成文本文件,完事。
lulu00147
202 天前
大哥你先把 excel 转成 csv 用 rust 写的这个
https://github.com/zitsen/xlsx2csv.rs/releases
然后把 csv 导入 mysql
在查询导出就行了
pota
202 天前
大量数据的输入输出都尽量使用 csv 来进行,一方面是可以按行处理,一方面也不需要导入库。还有超大量的数据处理最好用异步。
test123abc
202 天前
@lulu00147
@pota 多 sheet 的 excel ,用的 tp 框架
jackerbauer
202 天前
你可能需要 xlswriter: https://github.com/viest/php-ext-xlswriter
wxf666
202 天前
为嘛不用 DuckDB 呢?它支持直接读取 xlsx 呀。。

速度上,之前的 1BRC (十亿行文本)挑战里,它能做到(普通人 SQL 写法)计算只用 5 秒钟。

或者,23 亿词 13GB 的英文维基文本,计算 TOP 1000 高频词,i5-8250U 轻薄本上,单线程下,只需 3 分钟,500MB 内存。。

如果你用 PHP 不能做到,更快更省资源,用用它也不错呀。。

反正我用 Java 一般写法,都要 6 分钟,2GB 内存。。

用 C++ 来写,也才勉强和它打平。。

test123abc
201 天前
是要在内部的后台给运营人员开一个处理 excel 的地方
现在使用 xlswriter ,将 excel 转为 csv ,然后将 csv 导入数据库,在读取后处理导出,问题是 excel 转为 csv 时,如果是 00123 这种数据,转换后会变成 123 ,而且 csv 字段如果是科学计数法倒入数据库时会乱😭

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

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

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

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

© 2021 V2EX