如何减少庞大的excel文件

时间:2013-07-08 13:28:53

标签: excel file vba size

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

但是我做了很多修改,复制和粘贴,扩展公式,保存......之后我删除了大部分这些修改,并用少量数据制作了4张重复的文件。

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

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

我在真实文件上遇到同样的问题,每张纸上有300张和1张图片:文件大小280Mb

8 个答案:

答案 0 :(得分:11)

我以.XLSB格式保存文件以缩小尺寸。 XLSB还允许VBA和宏保留在文件中。我已经看到使用二进制格式化的50兆文件低于10。

答案 1 :(得分:5)

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

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

  1. 优化
  2. 优化并保存
  3. 停用优化工具
  4. Context menu after install it

    这是基于KB of Microsoft office 2003和PP的回答。与个人改善:

    1. 添加图片压缩
    2. 修复列的错误
    3. 专业与excel 2007 - 2010兼容 - ...(超过255列)
    4. 解决方案>您可以下载 my * .xlam file 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
      

答案 2 :(得分:3)

如果您的文件只是文本,最好的解决方案是将每个工作表保存为.csv,然后将其重新导入到Excel中 - 它需要更多工作,但我将20MB文件减少到43KB。

答案 3 :(得分:3)

我在Excel中进行了大量工作,发现以下3点非常有用

查找是否存在显然不包含任何数据的单元格,但Excel认为它们具有数据

您可以通过在工作表上使用以下属性来找到它

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

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

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

将文件转换为.xlsb格式

XLSM格式是为了使Excel符合Open XML,但实际使用Excel的XML格式时,实例很少。如果不是更多的话,这会使尺寸缩小近50%

存储信息的最佳方式

例如,如果您需要保存股票价格大约10年,并且您需要保存股票的开盘价,最高价,最低价,收盘价,这将导致 (252 * 10)*(4)正在使用的细胞

而是使用单独的列打开,高,低,关闭将它们保存在一个带有字段分隔符的列中 开:高:低:关闭

您可以轻松编写一个函数,以便随时从单列中提取信息,但它将释放您当前占用的近3/3空间

答案 4 :(得分:2)

i将文件格式更改为 *。XLSX 此更改压缩文件并将文件大小减小15%

答案 5 :(得分:1)

我有一个24英寸大小的excel文件,多亏了100多张图片。我通过以下步骤将大小减小到不到5MB:

  1. 选择每张照片,剪切(CTRL X)并通过ALT E S位图选项将其粘贴到特殊模式
  2. 要查找哪个位图仍然很大,必须选择每张纸上的一个文件,然后按CTRL A.这将选择所有图像。
  3. 双击任意一张图像,顶部会显示RESET Picture选项。
  4. 点击重置图片,所有仍然很大的图片都会显示。
  5. 执行CTRL Z(UNDO),现在再次将这些余额图像粘贴到BITMAP(* .BMP)中,如步骤1。
  6. 我花了2天的时间来弄明白这一点,因为这不在任何帮助论坛中列出。希望这个回复有助于某人

    BR Gautam Dalal(印度)

答案 6 :(得分:0)

答案 7 :(得分:0)

我偶然发现了一个巨大的.xlsx文件的有趣原因。 原始工作簿有20张左右,是20 MB 我用一张工作表制作了一个新的工作簿,因此它更易于管理:仍然是11.5 MB 想象一下,我惊讶地发现新工作簿中的单个工作表有1,041,776(计数&#39; em!)空白行。 现在它是13.5 KB