一位客户联系我,抱怨 Excel 电子表格打开时间太长。他们使用 Excel 创建发票,因此他们有数百个 Excel 电子表格,这些表格的格式简单,计算非常简单。按大小对电子表格进行排序时,我发现虽然大多数电子表格的大小在 10-250k 之间,但也有少数电子表格的文件大小为 2-3 MB 甚至更大。奇怪的是,文件大小不是很大,它们保存的数据也不多,只有一点点格式,可能是两三页打印的发票,但它们的数据量几乎与较小尺寸(和正常打开)的电子表格相同。
打开文件时,所需的 RAM 量会从 3 MB 飙升至 400 MB,启动时会完全占用单个核心(在办公室的双核和我的四核笔记本电脑上进行了测试)。我以为他们以某种方式捕获了一些 VBA 代码,但没有宏,也没有 VBA 代码。Ctrl+End 显示 39 行和大约 12 列(以 M 结束)。我甚至逐行或逐列删除了数据,直到没有数据剩余,但它仍然给我带来同样的问题。
我已经查看了很多 Google 搜索,但一无所获。有人能帮忙吗?
答案1
我找到了我的问题的答案!
根据 allquixotic 给我的线索,我在 7-Zip 中打开了 xlsx 文件,并比较了文件大小。有一个文件很多比其他文件大。文件 xl\drawings\drawing1.xml 是一个包含多次引用格式的文件。
我花了几个小时试图找出其中的规律,但一无所获。我怎么也弄不出来!然后,在一阵恼怒之后,我干脆删除了那个该死的文件,并尝试在 Excel 中重新打开(2010 - 没有在 Excel 2007 中测试)。
它抱怨文件已损坏,并询问我是否愿意尝试修复。修复文件只是删除了形状,但根本没有改变文件的格式。我不得不将文件重新保存为同一个文件,这有点奇怪,但它成功了!
正如我之前提到的,我还没有针对 Excel 2010 以外的任何产品测试过此解决方案,因此我不知道形状文件是否对 Excel 2k7 或任何 OpenOffice 产品至关重要。但是,如果您遇到类似的问题,希望这能有所帮助。
答案2
您使用的是二进制 .xls 格式还是新的基于 XML 的 .xlsx 格式?一般来说,.xlsx 格式可显著减小文件大小。
检查文档中存储的样式数量是否过多。
尝试“删除个人信息”(Excel/Word/等的功能)来清理文件中可能存在的某些垃圾。
如果电子表格已经共享或曾经共享过,则其中可能存储有旧的共享数据。
一个简单的解决方法是将相关数据从该电子表格复制并粘贴到新电子表格中,然后将其保存为 .xlsx 格式,看看它有多小。如果它非常小,那么你就知道答案了——Excel 对其内部文件格式的数据结构的核算很差。
还要检查复杂或循环的公式以及对外部工作表的引用(尤其是网络驱动器上的引用)。如果您认为某个公式可能运行缓慢,可以使用公式审核工具逐步执行。
最后一件事:如果您将其保存为 .xlsx 但仍然很大,请尝试下载 OpenXML SDK 生产力工具:http://www.microsoft.com/en-us/download/details.aspx?id=5124
打开其中的 .xlsx 文件,查看文件中的所有元素,看看是否有任何明显多余的内容。这可能需要 XML 和特定 OpenXML 架构的知识,但这是找出导致文件膨胀的原因的万无一失的方法。
PS——如果这种事情让你烦恼,请停止使用微软格式/程序或建议你的客户这样做。如果你在 Google 上搜索“Microsoft Access 数据库膨胀”,你会发现微软长期以来一直让其专有格式将大量无用数据泄漏到磁盘上,而这些数据从未被清理过。这就像一个非常严重的内存泄漏,它会消耗你的磁盘而不是内存。
答案3
另一个可能的解决方案是:
- 创建有问题的 Excel 文件的副本
- 打开该副本
- 按 CTRL+A,然后单击“清除”->“清除格式”
- 在每个工作表上重复步骤 3
- 保存文件并尝试重新打开它
当格式过多时,尤其是如果对许多单个单元格应用了许多不同的样式,Excel 在打开文件时很难尝试应用格式。
当然,当您删除所有格式时,所有单元格中将只剩下应用了默认样式的文本,边框、阴影等都消失了。但这样您就可以找出问题的原因。
答案4
就我而言,问题与“格式化为表格”有关。表格中有 16000 个空列。我想这是此类问题最常见的原因之一。