关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
经常有些人找我说Excel文件变得很大,打开和保存操作都很慢,有时还提示内存不足等。这个问题要怎么解决?
Excel文件大通常就是图片多,数据量大,格式多导致的。
图片多和数据量大容易理解。为什么格式多也会导致文件变大?
由于格式不是可以直接想文字实实在在可以辨别存储量是多大的,所以很容易被忽略了。这个下面会详细说明。
既然文件变大了,要怎么解决呢,一个一个来:
1)数据量大,基本是无解的。
若没设置什么格式,单纯只是数据,10几M的文件可以保存上十万行的数据。这个一般可以通过拆分文件处理或者删除无用的数据。
2)图片多,这个也容易解决。
图片多也包含各种对象多。删除图片,或者重新换小图。
3)格式多就清除格式。
格式多是指应用不同格式的单元格多(单元格多不等于数据量大)。这个需要选择单元格,再用菜单“开始”-->“编辑”-->“清除”-->“清除格式”即可。
这个格式多影响很大。我一般建议不要用太多格式。但很多新手很喜欢用各种各样的格式标记东西。
处理方法有了,但如何辨别是哪些情况呢?辨别清除是哪些情况才好对症下药。
整理了一套处理方法,如下:
1、若是xls文件,先另存为xlsx
xls格式的文件是纯粹的二进制文件,而xlsx格式的Excel文件是基于xml的。另存为xlsx之后,就可以用于下面的解压步骤。有时候甚至另存为xlsx之后,文件就变小了。
2、复制一份,再把文件名后缀xlsx改成zip,解压缩
看不到文件后缀的,先改一下系统设置,把文件后缀名显示出来。
改成zip之后,就可以解压缩。解压之后,出现如下的文档结构:
可能还有其他文件或文件夹,不过那些无关紧要。主要看这些文件夹或文件:
1)xl目录中的drawings文件夹。里面有个xml文件,该文件是记录原Excel文件中的形状信息。
2)xl目录中的media文件夹。若原Excel文件有图片、视频等媒体文件,就会出现该文件夹。
3)xl目录中的worksheets文件夹。该文件夹里面都记录原文件中的工作表信息。单元格的值和格式都在里面。
4)xl目录中的sytles.xml文件。该文件自然是记录该Excel文件的样式信息。
3、再挨个排查看哪些文件占用的空间比较大
1)drawings文件夹大,说明里面的形状太多。
可以打开原Excel文件,按Ctrl+G定位所有对象,再摁Delete删除。
那个网络流传的“电脑嘲笑找不到对象”的梗也是在这里出现的。
2)media文件夹大,说明里面的图片或其他媒体文件太多了。
同样可以用上面的方法定位对象,删除。
也可以用PS弄个批处理,批量把图片的尺寸改小(不要问我PS是什么)再覆盖回来。
覆盖回来之后,可以把解压出来的文件重新压缩为zip。把zip后缀改成xlsx又是一个Excel文件了。
3)styles.xml文件大,说明样式多。
其实这个文件也大不到哪里去,我只是想顺便提一下如何批量清除样式。
批量清除样式,可以利用vba代码。
打开原Excel文件,Alt + F11 快捷键打开vba界面。右键工程资源管理器,插入新模块。
看不到这个工程资源管理器?点击菜单“视图”-->“工程资源管理器”。
在新建的模块写入代码:
Public Sub ClearSytles() On Error Resume Next Dim sty As Style For Each sty In ActiveWorkbook.Styles sty.Delete Next End Sub
接着,点击上面的运行图标按钮执行这个宏即可。
用完这个模块之后,可以删除这个模块,不必保存代码(保存文件会提示是否继续,点是即可)。
4)workbooks文件夹里面的sheet.xml文件大。
通常这个就是具体的工作表了。每个xml就对应一个工作表,可以看出哪个文件比较大。
拿我一个朋友发给我的文件举例,TA的worksheets文件夹如下:
很明显有3个工作表比较大:Sheet2、Sheet11和Sheet13。
打开TA的Excel文件,发现只有5个表,而且名字对不上。这种情况说明表格被隐藏了,右键工作表标签取消隐藏。
至于名字对不上也是正常的,按Alt + F11。看vba界面的工程资源管理器。
很明显可以看出刚刚那3个比较大的工作表对应的表格。
再打开对应的表,全选内容(Ctrl + A),清除格式。保存之后,发现19M的文件变成400多k。
为什么差距这么大呢?而且那3个表中有两个表的数据确实不多,才100多行。
因为格式的信息量要比单元格值的信息要记录多得多。格式包括字体、背景、边框、单元格大小等等很多信息。
若格式设置得越多,需要记录的信息就越多,从而导致文件越大。
如果再加上数据量大,且应用不同格式的单元格多的话,这个文件占用空间就变得很大。
所以,少用格式。