Excel 文档情况:
现在,要找出这个 Excel 中,如果整列的所有单元格都为 “ No ”,则把这一列删除(其中所有列的第一行是列标题);文档非常多,人工查找简直要命。
已经尝试过用 C# 搭配 Office Excel 组件自动化操作,但在低配置的电脑上( 1G 内存那种)直接崩了。客户的员工电脑也不能让人升级配置…
也尝试了用 PHP 搭配 PHPExcel 操作,扔到阿里云小鸡上,一样挂了……
求一个更有效率的自动化处理方案,不管是写代码,还是宏脚本都可以…
|  |      1yangqi      2017-01-06 00:29:27 +08:00 如果就是简单文本的话,存成 csv 然后再处理 直接写宏脚本也可以,性能怎么样不知道 | 
|  |      2starvedcat      2017-01-06 00:29:56 +08:00 要不试试转换成 csv 再操作。。? | 
|      3ra1983      2017-01-06 00:45:28 +08:00 via Android  2 这种文件不算大,常年处理 50 万行以上的文件 我们用 SpreadsheetGear, 性能可以接受 个人经验,如果要删除行 /列,从最后一行 /列开始处理文件 | 
|  |      4October15      2017-01-06 00:49:36 +08:00 via Android 一种方案, 前提:文件转 xlsx 格式,电脑装至少 MSoffice2007 ; 用宏,操作速度很快,内存占用基本上 office 开文件是多少就是多少,不带界面的宏可以改写成独立的 vbs 、 js 文件,或者 C#程序(引用微软的 microsoft.office.interop.excel ), vbs 版本的 | 
|  |      5ihuotui      2017-01-06 00:50:28 +08:00 csv 然后文本操作 | 
|  |      6DarsyCheuk      2017-01-06 00:55:24 +08:00 via iPhone 之前用 python 處理過 excel ,情況跟你有點像, 400 行就挂了,感觉转成 csv 靠谱点?看看楼下的解决方案=͟͟͞͞•̫͡•ʔ | 
|  |      7Xs0ul      2017-01-06 00:58:49 +08:00 python pandas 几行代码的事儿 | 
|  |      8Tink PRO 这个用 python 就能操作啊 | 
|  |      9RE OP 谢谢大家 :) @yangqi @starvedcat @ihuotui @DarsyCheuk 转 CSV 不太可行,表格存在“合并单元格”的情况,有横有纵,怕转了 CSV 更不好判断; @Tink @Xs0ul 用 C# 和 PHP 也都是几行代码的事… 问题是在 1G 内存的机器上不要崩… @October15 安装 2007 不太可能… 客户的机器多… @ra1983 从最后一列开始处理,如果符合条件就立马删除?如果在此基础上,每删 1 列就保存一次、再打开,这个不知道能否起码保证不卡死 | 
|  |      11starvedcat      2017-01-06 02:05:55 +08:00 你确定崩溃是因为配置太低了吗,会不会是其他原因 | 
|  |      12RE OP @starvedcat 准确的讲应该是运行了时间很长之后变成无响应了,而在 8G 内存的机器上则能顺利完成。 | 
|  |      13shiny      2017-01-06 02:48:59 +08:00 via iPhone Excel 能导出 csv 的话 PHP 可以按行读取,存个变量,目测不会占多少内存。 | 
|  |      14shiny      2017-01-06 02:50:34 +08:00 via iPhone 能升内存解决就升个内存,几百块钱的事情,按 V2EX 的起步价,一天工资都要好几百了。 | 
|  |      15Xs0ul      2017-01-06 03:51:19 +08:00  1 @RE 客户公司里难道一台正经一点的机器都没有吗?我自己 16g 内存的笔记本,处理过 5000*5000 级别的,也处理过 200w * 100 这样的,内存要求并不高的样子。我觉得是不是因为,如果 1G 的员工电脑装的 Windows ,去掉操作系统和别的程序。。其实可能几乎都不剩什么内存了? 如果你有空在 vps 上试试 Python 的话,参考这个链接试试看(我倒是觉得你后来提到的合并单元格会麻烦一点,我没碰到过这个情况): http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html | 
|  |      16starvedcat      2017-01-06 03:56:22 +08:00 同意楼上说法,我觉得应该可以用编程方法解决的,用不了那么多内存 | 
|      17princelai      2017-01-06 07:46:37 +08:00 via Android 我常年处理 1 万 3 千+行, 10-15 列的表, pandas 几秒钟的事,但是我是 i3+8g | 
|  |      18BingoXuan      2017-01-06 08:40:07 +08:00 via iPhone 我试过 pandas 分别读取共一万行乘二十多列的 excel 数据,只要 io 没问题,其实 python 批量处理也是很快的。 | 
|      19truehyp      2017-01-06 08:50:35 +08:00 via Android 我会转成 csv ,用 shell 命令处理, linux 下 sort , cut 等命令效率挺高的 | 
|  |      20okampfer      2017-01-06 09:09:31 +08:00 有没有比较好用的 web 端 excel 替代品? | 
|  |      21BBrother      2017-01-06 09:26:33 +08:00  1 这个不是 vba 就能解决吗?先把所有 'No' 替换成 0 ,然后 sum 一下,不等于 0 的全部 Sheet1.Columns(列号).Delete | 
|  |      22300      2017-01-06 10:32:57 +08:00 我怎么觉得转换成数据库会好一点=。= | 
|      24loudis      2017-01-06 10:59:31 +08:00 明显用 vba 应该很容易搞定啊 | 
|  |      25wang9571      2017-01-06 11:05:04 +08:00 VBA+1 ,不过没必要进行替换,可以使用 CountIf | 
|      26yuedingwangji      2017-01-06 16:10:15 +08:00 @DarsyCheuk  python 处理 excel , 400 行就挂,这么弱? | 
|      27yuedingwangji      2017-01-06 16:11:27 +08:00 @truehyp  请问 shell 如何解决 excel 中 一个单元格多行的问题? | 
|  |      28October15      2017-01-06 16:44:38 +08:00 via Android | 
|  |      30billion      2017-01-06 16:53:29 +08:00 你知道 Python 里面有一个东西叫做生成器吗? 你的电脑之所以会崩溃,是因为你一次性读入了所有的内容。但是使用生成器,可以每次只读取一行内容。这样就不会导致内存占用太大。 | 
|  |      31vmebeh      2017-01-06 16:58:15 +08:00 via iPhone 用筛选,筛选整个表,如果下拉框只有“ No ”,没有“(空白)”或其他那么这列就可以删了 自动化可以考虑 VBA | 
|      32crazykuma      2017-01-06 17:00:57 +08:00 pandas | 
|  |      34RE OP | 
|  |      35October15      2017-01-06 17:16:09 +08:00 via Android @BBrother 我的建议也是装 office 用宏也就是 VBA ,然后你看题主 9L 回复我的 | 
|  |      37vmebeh      2017-01-06 17:20:15 +08:00 via iPhone 最好是放一部分样本出来 | 
|  |      38October15      2017-01-06 17:28:02 +08:00 via Android  1 @RE VBA 可以做跨表查询和表格合并, 查询我直接用过 range(范围). find 性能不错,一列一千数据,一个个在一列 8 万的里面查询也就几分钟 合并的话复制粘贴就好了,如果用 usedange.copy 可以只复制筛选后显示的部分 | 
|  |      39RE OP @October15 想做成 C# 的原因是比较傻瓜化,万一操作的人不懂 VBA 还要搞个培训什么的… 能一键搞定当然更省事嘛,只要 countif / find 这些的效率不错,做成 C# 的话合并自然就更简单啦~ | 
|  |      40October15      2017-01-06 17:32:24 +08:00 via Android @RE 只是我觉得 07 比 03 好用😅,另外 xls 最大行数比 xlsx 少, xlsx 文件体积小 | 
|  |      42October15      2017-01-06 17:46:28 +08:00 via Android @RE VBA 纯数据处理的宏,改成 C#、 vbs 、 js 难度不大, API 都一样语法差别而已。有一个宏写过 vbs 和 C#版本,但是 vbs 是 VB 子集更好改就是, vbs 、 js 脚本优势是双击直接运行,不用先开 excel 运行宏, notpad 直接改,装了 office 都能用 | 
|      43loudis      2017-01-06 18:20:21 +08:00 跨文件更该用 VBA 啊,用公式跨表格可能会很慢造成卡死。 VBA 直接可以打开多个文件处理,写好了代码,放在一个空文件里运行即可,多好。 | 
|  |      44mkeith      2017-01-07 23:29:45 +08:00 python 导入到 sqlite 分析然后再导出呢 |