ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] excel异常大文件产生原因分析及处理方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-18 12:40 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lbpp 于 2015-11-18 13:04 编辑

excel异常大文件产生原因分析及处理方法 lbpp 2015-11-18

一个朋友向我救助,说一个excel文件,最近打开速度超级慢,今天把该文件发给了我。
收到的时候,朋友用RAR压缩过的文件,大小1.75M。于是解压,解压后是一个.xlsm文件,大小一下子变成了161M,胖得可真快啊。
到了这里已经可以看出这个文件有问题了。因为xlsx文件在保存时已经通过zip压缩过了,正常情况下,如果再通过RAR来压缩一次,可以压缩的空间并不大,所以应该没有这么大的差距。
继续,将文件扩展名改成zip后解压,解压后大小变成了恐怖的1.56G,怪不得会出现打开超慢的情况。

各版本文件的大小

各版本文件的大小


接下来,遍历解压出来的文件夹,查找到底是什么文件占用了这么大的空间。结果在xl\worksheets 文件夹下发现一个大文件,大小1.25G,文件名为sheet8.xml。你能想象一个这么大的文本文件吗,试图使用几个文本编辑器来打开,结果都宣告失败。我的内存估计都装不下这个怪兽了。

超大文件

超大文件


由于这个名称sheet8并不直接对应工作表名或工作表CodeName,因此本来还想着打开这个文件好查看CodeName的方法也行不通了。(如果能用文本工具打开,文件内可以找到类似“<sheetPr codeName="codesh1"/>”,就可以知道工作表的CodeName,这样在VBE编辑器里就能查看对应的工作表名是什么了)。
到这里,我们能得到的信息就是sheet8.xml这个文件超大。接下来查看xl\_rels\workbook_xml.rels文件,通过搜索sheet8.xml找到一条信息
<Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet8.xml"/>
这里面提到Relationship Id="rId8",然后通过这个rId8,在\xl\workbook.xml文件中找到了rId8对应的工作表名<sheet name="股票池" sheetId="23" r:id="rId8"/>

查找对应的工作表

查找对应的工作表



终于找到了那个超大文件对应的工作表为"股票池"这张表了。庆祝一下{:soso_e168:}。




找到了原凶就好办了,打开看一下到底是什么何方妖孽。打开的过程超级慢,估计1分钟左右,总算没死机,打开了。
跳出一个警告,说存在循环引用。难道是不正常的循环引用造成的?通过工具栏“公式”->“错误检查”->“循环引用",找到循环引用的位置,发现该循环引用并不在那张有问题的工作表中,看来这个不是问题的原因,更正循环引用后继续。

循环引用处理

循环引用处理

接下来看了一下”股票池“这张表,发现表里面数据并不多,只有10几行数据,但有几列被设置了整列的颜色,但根据经验,整列的颜色并不会引起这么大的文件。
猜测是不是存在大量的看不见的内容,选择了所有无数据的行(选择的过程就很慢,可能是文件大了),用delete删除选中单元格的内容,保存,无效。
选中所有无数据的行,删除行,跳出一个”大规模操作“对话框,提示这个操作会引响大量单元格,确定后估计20几秒后完成。保存,文件终于变小了,文件大小321K。
终于搞定了!{:soso_e142:}

各文件大小

各文件大小


现在问题是解决了,但为什么会产生这个情况呢。
经与那位朋友了解后对产生问题的原因有了一个估计。
那位朋友需要得到一张和名为”员工持股“的工作表相同的工作表,于是就新建了一张空表,然后将”员工持股“表全表选中后复制粘贴到了新表中,估计这个行为导致excel认为整张工作表都被使用了,我们平时使用一张工作表,excel只保存了使用过的单元格的信息,因此,那些空的单元格内容是不被记录的,但当我们使用了某个单元格后,该单元格就被记录下来了,即使后来把单元格的内容删除了,但文件中还是存有该单元格的信息。我估计问题就是这个粘贴的过程产生的。因此我们在进行表的复制的时候尽量选择需要复制的内容,而不要选择整张表来复制。当然最好还是使用右键单击工作表标签,使用”移动或复制“来复制工作表,这样可以让新复制的工作表与原工作表完全一致,然后再对新表进行修改。

当然这只是我对问题产生原因的猜测,实际原因不一定是这个,这里只是把这个问题的整个过程记录下来,给大家提供一个解决问题的思路。

{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}{:soso_e182:}




TA的精华主题

TA的得分主题

发表于 2018-6-19 14:35 | 显示全部楼层
谢谢,非常好用,按照你的方法找到了造成xls文件特别大的sheet,删除重新建了一张就小多了。

TA的精华主题

TA的得分主题

发表于 2019-3-23 16:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-7-4 11:29 | 显示全部楼层
感谢分享,解决问题了。
顺带说下,我没有直接删除表格,而是整个表单更换了字体就ok~~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 17:57 , Processed in 0.038905 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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