超过 75000 个单元格的 Excel 文档,用代码操作如何更有效率?

2017-01-06 00:21:46 +08:00
 RE

Excel 文档情况:

现在,要找出这个 Excel 中,如果整列的所有单元格都为 “ No ”,则把这一列删除(其中所有列的第一行是列标题);文档非常多,人工查找简直要命。

已经尝试过用 C# 搭配 Office Excel 组件自动化操作,但在低配置的电脑上( 1G 内存那种)直接崩了。客户的员工电脑也不能让人升级配置…
也尝试了用 PHP 搭配 PHPExcel 操作,扔到阿里云小鸡上,一样挂了……

求一个更有效率的自动化处理方案,不管是写代码,还是宏脚本都可以…

3643 次点击
所在节点    问与答
44 条回复
yangqi
2017-01-06 00:29:27 +08:00
如果就是简单文本的话,存成 csv 然后再处理

直接写宏脚本也可以,性能怎么样不知道
starvedcat
2017-01-06 00:29:56 +08:00
要不试试转换成 csv 再操作。。?
ra1983
2017-01-06 00:45:28 +08:00
这种文件不算大,常年处理 50 万行以上的文件
我们用 SpreadsheetGear, 性能可以接受
个人经验,如果要删除行 /列,从最后一行 /列开始处理文件
October15
2017-01-06 00:49:36 +08:00
一种方案,
前提:文件转 xlsx 格式,电脑装至少 MSoffice2007 ;
用宏,操作速度很快,内存占用基本上 office 开文件是多少就是多少,不带界面的宏可以改写成独立的 vbs 、 js 文件,或者 C#程序(引用微软的 microsoft.office.interop.excel ), vbs 版本的
ihuotui
2017-01-06 00:50:28 +08:00
csv 然后文本操作
DarsyCheuk
2017-01-06 00:55:24 +08:00
之前用 python 處理過 excel ,情況跟你有點像, 400 行就挂了,感觉转成 csv 靠谱点?看看楼下的解决方案=͟͟͞͞•̫͡•ʔ
Xs0ul
2017-01-06 00:58:49 +08:00
python pandas 几行代码的事儿
Tink
2017-01-06 01:08:22 +08:00
这个用 python 就能操作啊
RE
2017-01-06 01:35:38 +08:00
谢谢大家 :)

@yangqi @starvedcat @ihuotui @DarsyCheuk
转 CSV 不太可行,表格存在“合并单元格”的情况,有横有纵,怕转了 CSV 更不好判断;


@Tink @Xs0ul
用 C# 和 PHP 也都是几行代码的事… 问题是在 1G 内存的机器上不要崩…

@October15
安装 2007 不太可能… 客户的机器多…

@ra1983
从最后一列开始处理,如果符合条件就立马删除?如果在此基础上,每删 1 列就保存一次、再打开,这个不知道能否起码保证不卡死
yangqi
2017-01-06 02:02:19 +08:00
@RE 这样看就只有写宏代码了,比较直接
starvedcat
2017-01-06 02:05:55 +08:00
你确定崩溃是因为配置太低了吗,会不会是其他原因
RE
2017-01-06 02:40:49 +08:00
@starvedcat 准确的讲应该是运行了时间很长之后变成无响应了,而在 8G 内存的机器上则能顺利完成。
shiny
2017-01-06 02:48:59 +08:00
Excel 能导出 csv 的话 PHP 可以按行读取,存个变量,目测不会占多少内存。
shiny
2017-01-06 02:50:34 +08:00
能升内存解决就升个内存,几百块钱的事情,按 V2EX 的起步价,一天工资都要好几百了。
Xs0ul
2017-01-06 03:51:19 +08:00
@RE 客户公司里难道一台正经一点的机器都没有吗?我自己 16g 内存的笔记本,处理过 5000*5000 级别的,也处理过 200w * 100 这样的,内存要求并不高的样子。我觉得是不是因为,如果 1G 的员工电脑装的 Windows ,去掉操作系统和别的程序。。其实可能几乎都不剩什么内存了?

如果你有空在 vps 上试试 Python 的话,参考这个链接试试看(我倒是觉得你后来提到的合并单元格会麻烦一点,我没碰到过这个情况):
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
starvedcat
2017-01-06 03:56:22 +08:00
同意楼上说法,我觉得应该可以用编程方法解决的,用不了那么多内存
princelai
2017-01-06 07:46:37 +08:00
我常年处理 1 万 3 千+行, 10-15 列的表, pandas 几秒钟的事,但是我是 i3+8g
BingoXuan
2017-01-06 08:40:07 +08:00
我试过 pandas 分别读取共一万行乘二十多列的 excel 数据,只要 io 没问题,其实 python 批量处理也是很快的。
truehyp
2017-01-06 08:50:35 +08:00
我会转成 csv ,用 shell 命令处理, linux 下 sort , cut 等命令效率挺高的
okampfer
2017-01-06 09:09:31 +08:00
有没有比较好用的 web 端 excel 替代品?

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

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

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

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

© 2021 V2EX