诊断缓慢的 Excel 电子表格?

Sim*_*ova 13 debug microsoft-excel-2010

一位客户联系我,抱怨 Excel 电子表格打开时间太长。他们使用 Excel 来创建发票,因此他们拥有数百个格式简单且计算非常简单的 Excel 电子表格。在按大小对电子表格进行排序时,我发现虽然大多数电子表格的范围在 10-250k 之间,但也有少数电子表格的文件大小为 2-3 MB 甚至更大。奇怪的是,文件大小并不大,它们没有保存太多数据,只是一些格式,可能有两到三页打印的发票,但它们的数据量几乎与较小尺寸(和正常打开)的电子表格相同.

打开文件时,所需的 RAM 量将从 3 MB 激增至 400 MB,并且在启动时会完全占用一个内核(在办公室的双核和我的四核笔记本电脑上进行了测试)。我以为他们以某种方式捕获了一些 VBA 代码,但是没有宏,没有 VBA 代码。Ctrl+End 显示 39 行和大约 12 列(以 M 结尾)。我什至逐行或逐列删除了数据,直到没有数据为止,它仍然给我同样的问题。

我已经查看了大量的 Google 搜索,但一无所获。任何人都可以提供任何帮助吗?

Sim*_*ova 7

我找到了我的问题的答案!

使用allquixotic给我的线索,我打开了7-Zip中的xlsx文件,并比较了文件大小。有一个文件,这是很多比别人大。文件 xl\drawings\drawing1.xml 是一个包含多次引用格式的文件。

我花了几个小时试图找出一个模式,但没能做到。我无法做的任何事情都无法让它发挥作用!然后,在一阵恼怒之后,我只是删除了该死的文件,并尝试在 Excel 中重新打开(2010-未在 Excel 2007 中对其进行测试)。

它抱怨文件已损坏,并询问我是否要尝试修复。修复文件只是擦除了形状,但根本没有改变文件的格式。我不得不将文件重新保存为同一个文件,这有点奇怪,但它有效!

正如我之前提到的,我没有针对 Excel 2010 以外的任何产品测试过此解决方案,因此我不知道形状文件是否对 Excel 2k7 或任何 OpenOffice 产品至关重要。但是,如果您有类似的问题,希望这会有所帮助。


all*_*tic 6

您使用的是二进制 .xls 格式还是新的基于 XML 的 .xlsx 格式?一般来说,.xlsx 格式会导致文件大小的显着减少。

检查文档中存储的样式数量是否过多。

尝试“删除个人信息”(Excel/Word/等的一个功能)以清理可能位于文件中的某些类型的垃圾。

如果电子表格已共享或之前已共享,则其中可能存储了旧共享数据。

一种简单的解决方法是仅将电子表格中的相关数据复制并粘贴到新的电子表格中,然后将其保存为 .xlsx 格式,看看它有多小。如果它非常小,那么你就有了答案——Excel 对其内部文件格式的数据结构的会计处理很差。

还要检查复杂的或循环的公式以及对外部工作表的引用(尤其是网络驱动器上的那些)。如果您认为公式可能很慢,您可以使用公式审核工具逐步完成它。

最后一件事:如果您将其保存为 .xlsx 并且它仍然很大,请尝试下载 OpenXML SDK Productivity 工具:http : //www.microsoft.com/en-us/download/details.aspx?id= 5124

在其中打开 .xlsx 并查看文件中的所有元素,看看是否有任何明显无关的内容。这可能需要了解 XML 和特定 OpenXML 模式,但这是找出导致膨胀的原因的可靠方法。

PS - 如果这种事情让您烦恼,请停止使用 Microsoft 格式/程序或建议您的客户这样做。如果您在谷歌上搜索“Microsoft Access 数据库膨胀”,您会发现 Microsoft 长期以来一直让其专有格式将大量无用数据泄漏到磁盘,而这些数据永远不会被清理。这就像一个非常讨厌的内存泄漏,它会吃掉你的磁盘而不是你的 RAM。