Excel 文件越来越大 (>150 MB)

Jos*_*osh 4 microsoft-office microsoft-excel

我公司的许多员工使用了一个特定的 Excel 文件。它是从 Excel 2003 和 2007 编辑的,打开了“共享”功能以允许多个作者同时进行。

该文件在具有一些基本格式的几张纸上有相当数量的数据,并且过去大约为 6MB,这对于其内容来说似乎是合理的。但是经过几周的编辑后,文件增长到 10 MB,然后是 20 MB,最终猛增到 150 MB 以上,尽管它的数据量仍然与以前大致相同。现在需要 5-10 分钟才能打开它,而保存它又要花那么多时间。

第一次发生这种情况时,我将每个工作表的内容复制到一个新的空白工作簿中,并保存了新工作簿;这使它回到大约 6MB。现在,它又炸了。

工作簿使用“数据验证”功能将某些列中的值限制为几个命名范围的内容。将所有数据复制到新工作簿中意味着重新设置所有数据验证,这很痛苦,而不是我们每个月都想做的事情。

作为故障排除步骤,我尝试将文件保存为“XML Spreadsheet 2003”格式,希望能深入了解所存储的内容。果然,这个文件几乎是一场演出,几乎所有的 1000 万行都是这样的:

<NamedCell ss:Name="Z_21D5114F_E50C_46AC_AA4F_C3FF540C717F_.wvu.FilterData"/>
<NamedCell ss:Name="Z_1EE2BA5E_3011_4F9A_8ACD_E58835250FC4_.wvu.FilterData"/>
<NamedCell ss:Name="Z_1E3BDCEA_6A72_4ECC_BF4F_7B03CC66181E_.wvu.FilterData"/>
Run Code Online (Sandbox Code Playgroud)

我在网上看到一些 VBScripts 来管理和枚举隐藏在 Excel 内置界面中的命名单元格,但我想知道它们如何处理我的1000 万个命名单元格。不过,我真正需要的是了解为什么会不断发生这种情况。excel 中的哪些操作可能会导致这种情况?

更新:

这是我尝试的一个实验,它提供了更多细节:

  • 我关闭了共享;文件仍然很大。
  • 我将文件保存为 .xlsx 文件,并将其缩小到 5MB。
  • 然后我关闭了那个文件,重新打开它,并将它保存为一个 .xls 文件,共享仍然关闭;又变大了!
  • 当 '03 用户尝试打开那个漂亮、紧凑的 .xlsx 文件时,即使 '07 可以正常打开它,也需要几分钟才能打开它。

因此,这似乎是 '03 特定的问题,并且以 '03 格式保存文件立即重新创建了一堆显然根本不在 '07 文件中的垃圾。

Sat*_*ppy 12

跟我一起说:Excel 不是数据库。

您遇到了软件的设计限制:它只有这么多的能力来存储交易数据,所以当多人写入它时,它必须存储大量信息以进行协调。你有这么多的数据,交易副本是巨大的。

Microsoft 假定(正确地)如果您有这么多数据,它会存储在数据库中,而您只是将 Excel 用作前端。

如果你打算这样工作,你至少应该拼凑一个小的 Access 数据库。它将为您省去一个令人头疼的问题,因为它本来就是这样工作的,而 Excel 却不是。

@Josh:是的,它绝对是在泄漏。当您共享文档时,它必须跟踪每个用户所做的修改……我将其称为“交易数据”,但您可以将其视为历史。由于从来没有“官方”版本,它会不断跟踪变化,而且文档膨胀得比甜甜圈店的 Kirstie Alley 更快。

这是设计使然。excel 专家可能会告诉您如何让它停止,但最好的解决方案就是不要将 excel 用于不断维护的数据。这并不是它的真正目的。

我对你的问题表示同情,但与试图延长不幸的黑客攻击时间相比,向上级解释问题并制定新程序是更好的解决方案。

@Josh:如果您只想缩小一次,请暂时复制所有数据,然后将其粘贴到新的电子表格中。这将杀死所有元数据,保证(确保您不选择整个工作表,而只选择其中包含数据的部分)但这充其量只是一个临时解决方案。

  • 从技术和流程的角度来看,他实际上是 100% 正确的.. 拿起 MS Access 和 VBA 入门,并为团队创建一个数据库。地狱,然后你将有一个新的技能可以使用,并且有一些新的东西可以放在简历上。请注意另一个答案(来自马特)也建议了一个数据库。如果您的下一个轻率的回答是“噗,我们不能给每个人 MS Access”,那么请获取一份 mySQL 的免费副本,并学习一些基本的 Web 开发。从网页操作数据库真的没有你想象的那么难。 (2认同)