11

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

但是我做了很多更改,复制和粘贴,扩展公式,保存......之后我删除了大部分更改,并用很少的数据制作了这张表的 4 个副本。

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

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

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

4

8 回答 8

12

我以 .XLSB 格式保存文件以减小尺寸。XLSB 还允许 VBA 和宏保留在文件中。我已经看到使用二进制格式的 50 meg 文件减少到不到 10 个。

于 2013-07-08T14:56:57.607 回答
5

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

我开发了一个具有自动安装功能的插件(只需在启用宏的情况下运行它)以在上下文菜单中包含许多新按钮:

  1. 优化
  2. 优化和保存
  3. 禁用优化器

安装后的上下文菜单

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

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

解决方案> 你可以下载我的 *.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
于 2013-07-08T17:00:54.810 回答
3

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

于 2014-11-04T21:49:49.993 回答
3

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

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

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

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

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

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

将文件转换为 .xlsb 格式

XLSM 格式是为了让 Excel 与 Open XML 兼容,但我们真正使用 Excel 的 XML 格式的例子很少。这将大小减少了近 50%,如果不是更多的话

存储信息的最佳方式

例如,如果您必须保存大约 10 年的股票价格,并且您需要保存股票的开盘价、最高价、最低价、收盘价,这将导致使用 (252*10) * (4) 个单元格

取而代之的是,不要为 Open、High、Low、Close 使用单独的列,而是将它们保存在带有字段分隔符的单列中 Open:High:Low:Close

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

于 2016-02-07T19:46:36.950 回答
2

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

于 2013-07-08T14:19:04.567 回答
1

查看以下帖子:http ://www.officearticles.com/excel/clean_up_your_worksheet_in_microsoft_excel.htm或http://www.contextures.on.ca/xlfaqApp.html#Unused

基本上:尝试谷歌搜索?

于 2013-07-08T13:48:00.643 回答
1

我有一个大小为 24MB 的 excel 文件,这要归功于其中包含 100 多张图片。我通过以下步骤将大小减小到 5MB 以下:

  1. 选择每张图片,将其剪切(CTRL X)并通过 ALT ES 位图选项以特殊模式粘贴
  2. 要找到仍然较大的位图,必须在每张纸上选择一个文件,然后按 CTRL A。这将选择所有图像。
  3. 双击任一图像,顶部会出现“重置图片”选项。
  4. 单击重置图片,所有仍然很大的图片都会显示出来。
  5. 执行 CTRL Z (UNDO),现在再次将这些平衡图像粘贴到 BITMAP (*.BMP) 中,如步骤 1。

我花了 2 天时间才弄清楚这一点,因为这没有在任何帮助论坛中列出。希望这个回复对某人有所帮助

BR Gautam Dalal(印度)

于 2015-01-05T15:51:44.357 回答
0

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

于 2016-05-11T14:37:54.100 回答