Как уменьшить огромный файл excel
У меня есть небольшой и простой файл в *.XLS только с одним листом, на этом листе всего много ячеек с небольшим текстом по номеру. (размер файла 24 КБ)
но я сделал много изменений, скопировать и вставить, расширить формулу, сохранить... после этого я удалил большинство этих изменений и сделать 4 копии этого листа с данными.
теперь мой новый файл очень огромный : 2.5 Мб !
где скрытые данные и как их удалить ?
У меня есть та же проблема в реальном файле с 300 листами и 1 изображением на каждом листе:размер файла 280Mb
8 ответов
сохранить файлы .Формат XLSB для сокращения размера. XLSB также позволяет VBA и макросы, чтобы остаться с файлом. Я видел 50 meg-файлов до менее чем 10 с двоичным форматированием.
Я написал файл VBA, чтобы добавить инструмент для очистки этих аномально больших файлов. Этот скрипт очищает все столбцы и строки после последних ячеек, используемых для сброса последних ячеек ([Ctrl]+[End]), а также обеспечивает сжатие изображений.
Я разрабатываю дополнения с автоматической установкой (просто запустите его с включенным макросом), чтобы включить в контекстное меню много новых кнопок:
- оптимизация
- оптимизация и сохранить
- отключить Оптимизатор
это основано на КБ Microsoft office 2003 и ответ PP. с улучшением личных данных:
- добавить сжатие изображений
- исправить ошибку для столбцов
- 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.
Я много работал в 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