如何减less一个巨大的Excel文件

我只有一个简单的* .XLS文件,只有一张纸,在这张纸上只有很多小号文字的单元格。 (文件大小24Kb)

但是我做了很多的修改,复制和粘贴,扩展公式,保存…之后,我删除了大部分这些变化,并使用这些数据创build了4个副本。

现在我的新文件是非常巨大的 :2.5Mb!

隐藏的数据在哪里,如何删除?

我在每张纸上有300张纸和1张照片的实际文件上有同样的问题: 文件大小为280Mb

我将文件保存为.XLSB格式以减小大小。 XLSB还允许VBA和macros保留在文件中。 二进制格式,我已经看到50兆文件下降到不到10。

我写了一个VBA文件来添加一个清理这些exception最大的文件的工具。 这个脚本清除了最后一个单元格用来重置最后一个单元格([Ctrl] + [End])之后的所有列和行,还提供了启用图像压缩。

我使用自动安装开发了一个AddIns(只需在启用macros的情况下运行它)在上下文菜单中包含许多新的button:

  1. 优化
  2. 优化和保存
  3. 禁用优化程序

上下文菜单安装后

这是基于Microsoft Office 2003的KB和PP的答案。 与个人改进:

  1. 添加图像的压缩
  2. 修复列的错误
  3. 与excel 2007 – 2010的兼容性 – …(超过255列)

解决scheme >你可以下载我的* .xlam文件ToolsKit

主要代码是

Sub ClearExcessRowsAndColumns() Dim ar As Range, r As Double, c As Double, tr As Double, tc As Double Dim wksWks As Worksheet, ur As Range, arCount As Integer, i As Integer Dim blProtCont As Boolean, blProtScen As Boolean, blProtDO As Boolean Dim shp As Shape Application.ScreenUpdating = False On Error Resume Next For Each wksWks In ActiveWorkbook.Worksheets Err.Clear 'Store worksheet protection settings and unprotect if protected. blProtCont = wksWks.ProtectContents blProtDO = wksWks.ProtectDrawingObjects blProtScen = wksWks.ProtectScenarios wksWks.Unprotect "" If Err.Number = 1004 Then Err.Clear MsgBox "'" & wksWks.Name & "' is protected with a password and cannot be checked.", vbInformation Else Application.StatusBar = "Checking " & wksWks.Name & ", Please Wait..." r = 0 c = 0 'Determine if the sheet contains both formulas and constants Set ur = Union(wksWks.UsedRange.SpecialCells(xlCellTypeConstants), wksWks.UsedRange.SpecialCells(xlCellTypeFormulas)) 'If both fails, try constants only If Err.Number = 1004 Then Err.Clear Set ur = wksWks.UsedRange.SpecialCells(xlCellTypeConstants) End If 'If constants fails then set it to formulas If Err.Number = 1004 Then Err.Clear Set ur = wksWks.UsedRange.SpecialCells(xlCellTypeFormulas) End If 'If there is still an error then the worksheet is empty If Err.Number <> 0 Then Err.Clear If wksWks.UsedRange.Address <> "$A$1" Then ur.EntireRow.Delete Else Set ur = Nothing End If End If 'On Error GoTo 0 If Not ur Is Nothing Then arCount = ur.Areas.Count 'determine the last column and row that contains data or formula For Each ar In ur.Areas i = i + 1 tr = ar.Range("A1").Row + ar.Rows.Count - 1 tc = ar.Range("A1").Column + ar.Columns.Count - 1 If tc > c Then c = tc If tr > r Then r = tr Next 'Determine the area covered by shapes 'so we don't remove shading behind shapes For Each shp In wksWks.Shapes tr = shp.BottomRightCell.Row tc = shp.BottomRightCell.Column If tc > c Then c = tc If tr > r Then r = tr Next Application.StatusBar = "Clearing Excess Cells in " & wksWks.Name & ", Please Wait..." Set ur = wksWks.Rows(r + 1 & ":" & wksWks.Rows.Count) 'Reset row height which can also cause the lastcell to be innacurate ur.EntireRow.RowHeight = wksWks.StandardHeight ur.Clear Set ur = wksWks.Columns(ColLetter(c + 1) & ":" & ColLetter(wksWks.Columns.Count)) 'Reset column width which can also cause the lastcell to be innacurate ur.EntireColumn.ColumnWidth = wksWks.StandardWidth ur.Clear End If End If 'Reset protection. wksWks.Protect "", blProtDO, blProtCont, blProtScen Err.Clear Next Application.StatusBar = False ' prepare les combinaison de touches pour la validation automatique de la fenetre ' Application.SendKeys "%(oe)~{TAB}~" ' ouvre la fenetre de compression des images Application.CommandBars.ExecuteMso "PicturesCompress" Application.ScreenUpdating = True End Sub Function ColLetter(ColNumber As Integer) As String ColLetter = Left(Cells(1, ColNumber).Address(False, False), Len(Cells(1, ColNumber).Address(False, False)) - 1) End Function 

我改变文件格式为* .XLSX这个改变压缩我的文件,减less文件大小的15%

如果你的文件只是文本,最好的解决办法是将每个工作表保存为.csv,然后将其重新导入到excel中 – 这需要更多的工作,但是我将一个20MB的文件减less到了43KB。

我曾在Excel中广泛工作,并发现以下3点非常有用

查找是否有单元格显然不包含任何数据,但Excel认为他们有数据

您可以通过在工作表上使用以下属性来find此信息

 ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 

如果此范围超过您有数据的单元格,请删除其余的行/列

你会惊讶地看到它可以释放的空间量

将文件转换为.xlsb格式

XLSM格式是为了使Excel与Open XML兼容,但实际上使用Excel的XML格式的情况很less。 如果不是更多,这可以将尺寸缩小近50%

存储信息的最佳方式

例如,如果您必须将股票价格保存10年左右,并且您需要保存股票的开盘价,最高价,最低价和收盘价,则会导致(252 * 10)*(4)个单元格被使用

相反,使用单独的列打开,高,低,closures使用字段分隔符保存在一个列中打开:高:低:closures

你可以很容易的编写一个函数来从任何一个列中提取信息,但是它会释放你正在使用的几乎2/3的空间

我有一个大小为24MB的excel文件,这要归功于其中的100多个图像。 我通过以下步骤将大小缩小到小于5MB:1.select每个图片,将其剪切(CTRL X)并通过ALT ES位图选项2以特殊模式粘贴。要查找哪个位图仍然很大,必须select每个文件的一个文件,然后做CTRL A.这将select所有的图像。 3.双击任何一个图像,RESET图片选项出现在最上面。 4.点击重置图片,所有仍然很大的图片显示出来。 5.执行CTRL Z(UNDO),现在再次将这些平衡图像粘贴到BITMAP(* .BMP)中,如步骤1所示。

这花了我2天的时间,因为这没有列出在任何帮助论坛。 希望这个回应有助于某人

BR Gautam Dalal(印度)

看看这样的post: http : //www.officearticles.com/excel/clean_up_your_worksheet_in_microsoft_excel.htm或http://www.contextures.on.ca/xlfaqApp.html#Unused

基本上:尝试谷歌search?

我偶然发现了一个巨大的.xlsx文件的一个有趣的原因。 原来的工作簿有20张左右,是20 MB我用一张纸做了一个新的工作簿,所以它会更易于pipe理:仍然是11.5 MB想象一下,我惊奇地发现,新工作簿中的单张纸张有1,041,776(count' em!)空行。 现在是13.5 KB