Как уменьшить огромный файл excel

У меня есть небольшой и простой файл в *.XLS только с одним листом, на этом листе всего много ячеек с небольшим текстом по номеру. (размер файла 24 КБ)

но я сделал много изменений, скопировать и вставить, расширить формулу, сохранить... после этого я удалил большинство этих изменений и сделать 4 копии этого листа с данными.

теперь мой новый файл очень огромный : 2.5 Мб !

где скрытые данные и как их удалить ?

У меня есть та же проблема в реальном файле с 300 листами и 1 изображением на каждом листе:размер файла 280Mb

8 ответов


сохранить файлы .Формат XLSB для сокращения размера. XLSB также позволяет VBA и макросы, чтобы остаться с файлом. Я видел 50 meg-файлов до менее чем 10 с двоичным форматированием.


Я написал файл VBA, чтобы добавить инструмент для очистки этих аномально больших файлов. Этот скрипт очищает все столбцы и строки после последних ячеек, используемых для сброса последних ячеек ([Ctrl]+[End]), а также обеспечивает сжатие изображений.

Я разрабатываю дополнения с автоматической установкой (просто запустите его с включенным макросом), чтобы включить в контекстное меню много новых кнопок:

  1. оптимизация
  2. оптимизация и сохранить
  3. отключить Оптимизатор

Context menu after install it

это основано на КБ Microsoft office 2003 и ответ PP. с улучшением личных данных:

  1. добавить сжатие изображений
  2. исправить ошибку для столбцов
  3. feat совместимость с 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" 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

Если ваш файл просто текст, лучшим решением является сохранение каждого листа как .csv, а затем реимпортировать его в excel - это займет немного больше работы, но я уменьшил файл 20MB до 43KB.


Я меняю формат файла на *.XLSX-файл это изменение сжимает мой файл и уменьшает размер файла на 15%


Я много работал в Excel и нашел следующие 3 пункта очень полезными

найдите, есть ли ячейки, которые, по-видимому, не содержат никаких данных, но Excel считает, что у них есть данные

вы можете найти это, используя следующее свойство на листе

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

если этот диапазон больше, чем ячейки, по которым у вас есть данные, удалите остальные строки / столбцы

вы будете удивлены, увидев, сколько места он может бесплатно

конвертировать файлы .файл xlsb формате

формат XLSM должен сделать Excel совместимым с Open XML, но есть очень мало случаев, когда мы фактически используем формат XML Excel. Это уменьшает размер почти на 50%, если не больше

оптимальный способ хранения информации

например, если вам нужно сохранить цену акций около 10 лет, и вам нужно сохранить Open, High, Low, Close для акции, это приведет к (252*10) * (4) используемые ячейки

вместо использования отдельных столбцов для Open, High,Low, Close сохраните их в одном столбце с разделителем полей Открыть: Высокий:Низкий: Закрыть

вы можете легко написать функцию для извлечения информации из одного столбца, когда захотите, но она освободит почти 2/3 пространства, которое вы в настоящее время занимаете


У меня был файл excel размером 24 Мб, благодаря более чем 100 изображениям внутри. Я уменьшил размер до менее чем 5MB следующими шагами: 1. Выделил каждую картинку, вырезал ее (CTRL X) и вставил в специальный режим с помощью опции Alt E S Bitmap 2. Чтобы найти, какое растровое изображение все еще было большим, нужно выбрать один из файлов на листе, затем сделать CTRL A. Это выберет все изображения. 3. Дважды щелкните по любому изображению, и сверху появится опция сброса изображения. 4. Нажмите на reset picture и все изображения, которые все еще большой. 5. Сделайте CTRL Z (отменить) и теперь снова вставьте эти изображения баланса в растровое изображение (*.BMP), как Шаг 1.

Мне потребовалось 2 дня, чтобы понять это, так как это не было указано в любом форуме помощи. Надеюсь, этот ответ поможет кому-то

BR Гаутам Далал (Индия)


посмотрите на сообщения, такие как:http://www.officearticles.com/excel/clean_up_your_worksheet_in_microsoft_excel.htm или http://www.contextures.on.ca/xlfaqApp.html#Unused

в основном: попробуйте погуглить?


я наткнулся на интересную причину для гигантского .xlsx файл. Оригинальная книга имела 20 листов или около того, была 20 МБ Я сделал новую книгу с 1 листами, поэтому она будет более управляемой: все еще 11.5 MB Представьте себе мое удивление, обнаружив, что на одном листе в новой книге было 1,041,776 (посчитайте их!) пустая строка. Теперь это 13.5 KB