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

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

Excel 文档情况:

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

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

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

3645 次点击
所在节点    问与答
44 条回复
BBrother
2017-01-06 09:26:33 +08:00
这个不是 vba 就能解决吗?先把所有 'No' 替换成 0 ,然后 sum 一下,不等于 0 的全部 Sheet1.Columns(列号).Delete
winterbells
2017-01-06 10:32:57 +08:00
我怎么觉得转换成数据库会好一点=。=
RE
2017-01-06 10:57:28 +08:00
@BBrother 机智,这个应该有戏!
loudis
2017-01-06 10:59:31 +08:00
明显用 vba 应该很容易搞定啊
wang9571
2017-01-06 11:05:04 +08:00
VBA+1 ,不过没必要进行替换,可以使用 CountIf
yuedingwangji
2017-01-06 16:10:15 +08:00
@DarsyCheuk python 处理 excel , 400 行就挂,这么弱?
yuedingwangji
2017-01-06 16:11:27 +08:00
@truehyp 请问 shell 如何解决 excel 中 一个单元格多行的问题?
October15
2017-01-06 16:44:38 +08:00
@loudis
@wang9571
@BBrother
有不装 excel 用 VBA 的方法吗?
BBrother
2017-01-06 16:49:51 +08:00
@October15 不知道,为什么有这么奇怪的需求? office 之外,什么场景会单独用 vba ?
billion
2017-01-06 16:53:29 +08:00
你知道 Python 里面有一个东西叫做生成器吗?
你的电脑之所以会崩溃,是因为你一次性读入了所有的内容。但是使用生成器,可以每次只读取一行内容。这样就不会导致内存占用太大。
vmebeh
2017-01-06 16:58:15 +08:00
用筛选,筛选整个表,如果下拉框只有“ No ”,没有“(空白)”或其他那么这列就可以删了
自动化可以考虑 VBA
crazykuma
2017-01-06 17:00:57 +08:00
pandas
RE
2017-01-06 17:09:18 +08:00
@billion 兄台估计还不明白 .xls 格式……
RE
2017-01-06 17:15:00 +08:00
@loudis @wang9571 @vmebeh

主题中还有一个需求没说出来,就是需要到另一份 excel 去查找数据,合并成一个新表格,所以觉得 vba 并不是很合适。

此前是卡在逐个单元格判断这一块,经 @BBrother 和 @wang9571 的提醒,改成 CountIf 之后效率提高了很多,现在该来做更蛋疼的合并表格了。

发帖询问还是很有帮助的,除了知道了很多工具意外,也能获得更广阔的编程思路,后者比工具其实更有价值!
October15
2017-01-06 17:16:09 +08:00
@BBrother 我的建议也是装 office 用宏也就是 VBA ,然后你看题主 9L 回复我的
RE
2017-01-06 17:20:13 +08:00
@October15 话说 Office 2003 也有宏啊…… 为啥前提一定要 2007 呢
vmebeh
2017-01-06 17:20:15 +08:00
最好是放一部分样本出来
October15
2017-01-06 17:28:02 +08:00
@RE VBA 可以做跨表查询和表格合并,
查询我直接用过 range(范围). find 性能不错,一列一千数据,一个个在一列 8 万的里面查询也就几分钟
合并的话复制粘贴就好了,如果用 usedange.copy 可以只复制筛选后显示的部分
RE
2017-01-06 17:31:24 +08:00
@October15 想做成 C# 的原因是比较傻瓜化,万一操作的人不懂 VBA 还要搞个培训什么的… 能一键搞定当然更省事嘛,只要 countif / find 这些的效率不错,做成 C# 的话合并自然就更简单啦~
October15
2017-01-06 17:32:24 +08:00
@RE 只是我觉得 07 比 03 好用😅,另外 xls 最大行数比 xlsx 少, xlsx 文件体积小

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

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

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

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

© 2021 V2EX