ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6850|回复: 11

[讨论] 如何快速删除工作表里大量的图形对象?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-6 20:34 | 显示全部楼层 |阅读模式
最近遇到个朋友求助,说她的表格内容不多,但是使用起来异常慢,几乎卡死,我拿到文件看了下,发现里面存在大量的非常细小的图形对象,数量接近20万,我推测会不会是她在网络上拿的数据,网站在数据里插了对象干扰。最初尝试用定位对象,但是由于数量太多,光是定位选中就耗费了大量的时间。于是弄了代码清除这个工作表里的对象,一开始用For Each,发现完全清除这些对象要1个多小时,后来试了下For i = shapes.count to 1 step -1这种办法,发现更慢,要2个多小时,再后来发现了DrawingObjects这个集合,使用DrawingObjects.Delete这个方法最快,大概30分钟就完成,比For Each快了2倍有多。但是感觉大半个小时还是太长了点,这里想请教下大家有没有处理过类似的问题?有没有更快捷的办法?另外DrawingObjects这个集合找不到帮助信息,希望哪位知道的可以提供一下,先谢谢大家

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-6 20:39 | 显示全部楼层
这里我粗略做了三组测试

工作表里有10000个对象,三种方法删除的时间:
DrawingObjects:2.05秒
For i = k To 1 Step -1:10.67秒
ForEach:10.52秒

工作表里有50000个对象,三种方法删除的时间:
DrawingObjects:158.47秒
For i = k To 1 Step -1:456.19秒
ForEach:277.13秒

工作表里有100000个对象,三种方法删除的时间:
DrawingObjects:847.87秒
For i = k To 1 Step -1:2160.94秒
ForEach:1386.01秒

TA的精华主题

TA的得分主题

发表于 2019-11-6 22:27 | 显示全部楼层
看到过一个帖子,地址找不到了,可以快速删除,步骤是这样的,不用打开文件,而且速度超快。
WinRAR软件打开文件,找到xl下的drawings ---》drawing1.xml ,删除,有时可能还有drawing2.。。。
再打开时会 出现下面的提示,点:是
image.png
然后就会出现对象被删除的提示:
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-6 22:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
佩服你的耐心,能等2个小时测试。。。,后来发现了关键字,说的表格内容不多,明白了。。。哈哈,开个玩笑,帖子找到,顺便贴个原帖地址,http://club.excelhome.net/thread-1459455-2-1.html,14楼神操作。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-6 22:42 | 显示全部楼层
凭个人经验来看,定位并删除对象是比较快捷的方式,暂时未发现更好的方式。
或者你变通一下,复制工作表中的内容,粘贴到新的工作簿。

TA的精华主题

TA的得分主题

发表于 2019-11-6 23:07 | 显示全部楼层
leroy 发表于 2019-11-6 22:42
凭个人经验来看,定位并删除对象是比较快捷的方式,暂时未发现更好的方式。
或者你变通一下,复制工作表中 ...

教管员好,可是有的时候,如果文件内对象超多,打开都挺费劲,很难定位删除,或复制数据出去,但用上面WINRAR的方法确实更快,更直接。我把原帖的附件拿过来了,你测试下。

登记 - 副本.rar

769.07 KB, 下载次数: 42

TA的精华主题

TA的得分主题

发表于 2019-11-7 03:33 | 显示全部楼层
一次性的操作,慢点也无所谓,二楼已测试,10000个,DrawingObjects:2.05秒,已经够快了,普通的工作薄中根本达不到10000个图形,没有必要追求更快.

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-7 09:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wodewan 发表于 2019-11-6 22:39
佩服你的耐心,能等2个小时测试。。。,后来发现了关键字,说她的表格内容不多,明白了。。。哈哈,开个玩 ...

哈哈,我就猜强大的EH肯定会有神操作,但是有时候茫茫贴海找出这个方法还是要费一番劲,谢谢你的指引,让我的见识又增长了,再次感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-7 09:38 | 显示全部楼层
leroy 发表于 2019-11-6 22:42
凭个人经验来看,定位并删除对象是比较快捷的方式,暂时未发现更好的方式。
或者你变通一下,复制工作表中 ...

定位确实是最快的,DrawingObjects这个方法应该就是来源于定位的命令,只是当对象太多的时候,操作会很慢很卡的,移表也很慢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-7 09:42 | 显示全部楼层
larer 发表于 2019-11-7 03:33
一次性的操作,慢点也无所谓,二楼已测试,10000个,DrawingObjects:2.05秒,已经够快了,普通的工作薄中根本达 ...

只是感觉10几万的数据也不是很多,得花半个小时的话,感觉效率也还是不高,楼上有位兄弟推荐的方法很棒
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 17:05 , Processed in 0.041799 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表