收到一个excel文件,总计1000行4列文字,文件大小却有412k。上下滚动没有异常,但是一旦涉及复制或排序就会变得十分缓慢,进程显示占用900多兆内存。放大后仔细观察,发现里面隐藏着很多图片、文本框之类的形状,使用VBA检查,debug.print sheet1.shapes.count
,显示有40526个shape。这些形状都没有尺寸,选中一个并拖拽后发现是一些图片之类的东西,如下图显示:
一开始使用‘Ctrl+G’定位到‘对象’后删除,excel文件会失去响应,然后崩溃。即使只选择其中一个,也不能删除。真是奇哉怪哉。摸索了半天,最终解决了问题,总结三种删除方法如下:
1 采用VBA并结合对象组合法
Sub clearShape()
On Error Resume Next
Dim shp As Shape
For Each shp In Sheet1.Shapes
shp.Delete
Next
End Sub
执行完毕后在立即窗口‘?sheet1.Shapes.Count’,发现还有388个shape没有删除。这时采用‘Ctrl+G’定位到‘对象’后点delete仍是删除不了的,需要鼠标右键选择组合,将它们组合成一个对象,然后点击delete才能删除。
2 改后缀名法
将excel文件的后缀名由xlsx改为rar(改成zip后尝试失败),然后用winrar打开压缩吧,删除其中xl文件夹下的“drawings”和“ink”文件夹,然后关闭winrar,再将rar文件的后缀名改回xlsx,用Excel打开会提示“部分内容有错误尝试修复”,选是,所有的图片都被删除了。如下图:
3 另存为法(强烈推荐)
将xlsx文件另存为CSV格式文件,用Excel打开后再另存为xlsx文件,图片全部删除,问题解决。