Слишком Много Различных Форматов Ячеек

  1. У меня есть массивный файл с 10 листами, воссозданными с нуля, обновленными 12 листами, 5 листами, загруженными необработанными данными, и 7 листами, которые используются макросами для отчета.
  2. недавно я добавил новый лист и запускаю в Excel "слишком много различных форматов ячеек"

15 ответов


" форматы ячеек " сложны. Ячейки на самом деле не имеют "формата". Они имеют шрифт (который сам имеет имя и размер), Числоформат, высоту, ширину, ориентацию и т. д.

Итак, вам нужно определить, что вы подразумеваете под "формат".

Ниже приведен код для получения имени и размера шрифта. Вы можете заменить любые атрибуты, которые вам нравятся.

приведенный ниже код предполагает, что вы создали рабочий лист с именем "форматы" в книге. После запуска макроса, шрифт Имена и размеры будут перечислены в этом листе.

Public Sub GetFormats()

    Dim CurrentSheet As Integer
    Dim UsedRange As Range
    Dim CurrentCell As Range
    Dim rw As Long

    Sheets("Formats").Cells.ClearContents
    rw = 1
    For CurrentSheet = 1 To Sheets.Count
        Set UsedRange = Range(Sheets(CurrentSheet).Range("A1"), Sheets(CurrentSheet).Range("A1").SpecialCells(xlLastCell))
        For Each CurrentCell In UsedRange
            FontUsed = CurrentCell.Font.Name + ":" + CStr(CurrentCell.Font.Size)
            If Sheets("Formats").Cells.Find(FontUsed) Is Nothing Then
                Sheets("Formats").Cells(rw, 1).Value = FontUsed
                rw = rw + 1
            End If
        Next
    Next CurrentSheet
End Sub

описанная вами проблема заставила меня (и коллегу) потерять много часов производительности при использовании Excel 2010. Следующий код / макрос VBA помог мне отбросить a .xlsm файл с использованием 3540 стилей до 34.

' Description:
'    Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp

Option Explicit

' Description:
'    This is the "driver" for the entire module.
Public Sub DropUnusedStyles()

    Dim styleObj As Style
    Dim rngCell As Range
    Dim wb As Workbook
    Dim wsh As Worksheet
    Dim str As String
    Dim iStyleCount As Long
    Dim dict As New Scripting.Dictionary    ' <- from Tools / References... / "Microsoft Scripting Runtime"

    ' wb := workbook of interest.  Choose one of the following
    ' Set wb = ThisWorkbook ' choose this module's workbook
    Set wb = ActiveWorkbook ' the active workbook in excel


    Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count
    MsgBox "BEGINNING # of styles in workbook: " & wb.Styles.Count

    ' dict := list of styles
    For Each styleObj In wb.Styles
        str = styleObj.NameLocal
        iStyleCount = iStyleCount + 1
        Call dict.Add(str, 0)    ' First time:  adds keys
    Next styleObj
    Debug.Print "  dictionary now has " & dict.Count & " entries."
    ' Status, dictionary has styles (key) which are known to workbook


    ' Traverse each visible worksheet and increment count each style occurrence
    For Each wsh In wb.Worksheets
        If wsh.Visible Then
            For Each rngCell In wsh.UsedRange.Cells
                str = rngCell.Style
                dict.Item(str) = dict.Item(str) + 1     ' This time:  counts occurrences
            Next rngCell
        End If
    Next wsh
    ' Status, dictionary styles (key) has cell occurrence count (item)


    ' Try to delete unused styles
    Dim aKey As Variant
    On Error Resume Next    ' wb.Styles(aKey).Delete may throw error

    For Each aKey In dict.Keys

        ' display count & stylename
        '    e.g. "24   Normal"
        Debug.Print dict.Item(aKey) & vbTab & aKey

        If dict.Item(aKey) = 0 Then
            ' Occurrence count (Item) indicates this style is not used
            Call wb.Styles(aKey).Delete
            If Err.Number <> 0 Then
                Debug.Print vbTab & "^-- failed to delete"
                Err.Clear
            End If
            Call dict.Remove(aKey)
        End If

    Next aKey

    Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count
    MsgBox "ENDING # of style in workbook: " & wb.Styles.Count

End Sub

многие люди, похоже, сталкиваются с этой проблемой.

чаще всего вопрос связано с чрезмерным количеством неиспользуемых и часто поврежденных стилей и не столько общее количество ячеек уникального формата ячеек комбо.

Я написал утилиту для исправления файлов XL2007 OOXML, которые можно сохранить до XL2003. Вот это ссылке в блог:

  • требуется .Net3.5 и MS Excel 2007.
  • будет исправить файлы xlsx или xlsm.
  • сообщение имеет файл ReadMe, чтобы пойти с приложением.

нет необходимости рисковать дальнейшим повреждением файла с помощью Open Office, как это предлагается на некоторых других форумах


были устранены ошибки, которые приводят к сообщению об ошибке "слишком много форматов ячеек" в Excel 2007+: http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for-excel-2007-custom-styles-duplication/ Обратите внимание, что исправления ошибок не удалят ранее существовавшие стили, связанные с повреждением файлов. Инструменты на основе Open XML (доступны бесплатно) являются единственным вариантом, который может удалить элементы, недоступные для инструментов на основе объектной модели Excel: например, плохие стили, которые маскируются под встроенные, скрытые стили и т. д... Очистка на основе Open XML означает 100% стили, связанные с повреждением файлов.


У меня была эта проблема, нашел самый простой способ очистить ее с помощью этот Excel добавить в. Похоже, это "официальный" ответ от страница Microsoft по проблеме.

для людей, которые так же смущены, как я использовал .xlam файлы, после загрузки вы делаете это в Excel:

  1. нажмите на Файл
  2. в разделе Управление нажмите кнопку Go.
  3. в окне надстройки нажмите кнопку Обзор, перейдите к месту сохранения XLAM-файла, выделите его и нажмите кнопку ОК.
  4. включите новую надстройку в окне надстройки и нажмите кнопку ОК.
  5. на панели ленты главного экрана теперь должен быть раздел "удалить стили", который состоит из кнопки, показывающей количество стилей в книге (возможно, тысячи, если у вас есть эта проблема).
  6. Нажмите кнопку на ленте, и она устранит все дубликаты форматы.

Если вы не видите его, убедитесь, что он показывает правильно на ленте. Щелкните правой кнопкой мыши на ленте и скажите "Настроить ленту". Затем нажмите на надстройки. В разделе активные надстройки приложений вы увидите "удалить дополнительные стили".


SpreadsheetGear для .NET будет coallesce не уникальные форматы, которые могут помочь в вашей ситуации.

вы можете скачать бесплатную пробную здесь Если вы хотите, чтобы увидеть, помогает ли это. Просто загрузите книгу в приложение" SpreadsheetGear 2009 для Windows", которое установлено с программным обеспечением для оценки, а затем сохраните книгу.

Если у вас действительно есть так много уникальных форматов, вам придется упростить. Каждый уникальный сочетание цвета шрифта / ячейки (интерьер), формата номера, горизонтального и вертикального выравнивания, границ, уровня отступа и, вероятно, нескольких вещей, о которых я не думаю, вызовет уникальную запись в таблице.

другой вариант-переключиться на Excel 2007, который имеет ограничение на уникальные форматы ячеек, увеличенное с 4,000 до 64K.

отказ от ответственности: я владею SpreadsheetGear LLC


Я видел эту проблему раньше. Можно воссоздать, чтобы доказать то, что я собираюсь сказать. Это немного Уловка 22, но когда у вас есть лист, который имеет проблему "слишком много форматов", откройте совершенно новый лист и скопируйте одну ячейку из листа "слишком много форматов" и просто вставьте ее в новую книгу. Эта книга теперь будет "заражена", как это было, и также будет иметь слишком много ошибок форматов. Кажется, что многие данные формата приходят с этой пастой, Если вы используйте специальную пасту, чтобы ограничить ее.

Как сделать лучше? Ну, обходной путь-использовать функцию Save As HTML. Потерпи, хоть это и работает. Я говорю о 2003 здесь, я не знаю, что происходит в 2007, возможно, эта ошибка была исправлена. Так. .. Сохраните как Html, затем закройте excel. Загрузите новый сеанс и загрузите его, убедившись, что вы не запустите все макросы, а затем после загрузки сохраните как электронную таблицу.

когда вы закрываете и открываете это новое таблица слишком много форматов беды должны уйти.


одним из решений может быть использование ASAP utilities. В разделе листа есть . Затем вам нужно закрыть книгу и снова открыть, я думаю.


это удалит все стили, кроме стилей по умолчанию (обычный, пояснительный, 20% Accent1 и т. д.). Включая стили, созданные пользователем, но это быстрый и грязный способ очистить книги:


Sub NewNukeStyles()
Dim tempstyle As Style

For Each tempstyle In ActiveWorkbook.Styles

 If tempstyle.BuiltIn = False Then
    If tempstyle.Locked = True Then 'not sure what this is
       tempstyle.Delete
    End If
End If

Next tempstyle

End Sub 'NukeStyles

Я хотел бы знать, что такое tempstyle.заблокированное свойство фактически ссылается на другое, чем "логическое значение, указывающее, заблокирован ли объект".


Если вы можете открыть файл > правка > очистить > форматы.

выделите лист, прежде чем нажимать форматы, которые он работал для меня.

убедитесь, что вы делаете копию EXCEL, прежде чем делать это просто в случае чего-то не хватает, вы можете пересечь ссылку на старый документ.


это ошибка в Excel, которая поражает все выпущенные версии.

проблема может быть исправлена с помощью этой.

работает с XLS и XLSX файлы.


Я знаю, что выше есть некоторые интересные методы для решения этой ошибки.

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

  1. копировать рабочий лист в новый файл-это эффективно, но занимает время
  2. удалить диапазоны, которые вы не знаете, что они являются
  3. переформатируйте листы, чтобы у вас был набор форматов mimimum
  4. очистить все формат

надеюсь, вам понравятся эти основные советы

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


Я в значительной степени использовал все ответы здесь, но сообщение об ошибке осталось.

после прочтения этой страницы поддержки microsoft (https://support.microsoft.com/en-us/kb/213904), я пришел в XLStylesTool.исполняемый.

но, опять не повезло (потому что я использовал его неправильно).

У меня windows seven, поэтому версия windows 8/10 не работает.

Я читаю комментарии со страницы загрузки (потому что это не написано в информации о загрузке) здесь https://sergeig888.wordpress.com/2011/03/21/net4-0-version-of-the-xlstylestool-is-now-available/

Я узнал, что мне нужно.NET4.Версия 0 для работы под win7 (эти манекены не могут просто назвать ее версией win7 ???)

ссылка для скачивания: https://skydrive.live.com/redir?resid=53E1D37F76F69444!900&authkey=!AH5oeGVaWlMsFHA&ithint=file%2c.zip

моей следующей проблемой было то, что она не работает на *.XLS, поэтому я открыл excel и сохранен как *.XLSM, который работает.

после этого просто нажмите "получить файл Excel" и "файл процесса" (я проверил "зафиксировать изменения и открыть в excel", а в excel "сохранить как""*.в XLS'. Закройте excel, откройте файл, работает (без предупреждения) !!!


Если это дает вам ошибку "слишком много форматов ячеек", то сохраните документ сразу. Измените имя документа на какое-либо другое имя на данный момент. Откройте документ и сохраните его с тем же именем, что и ранее. Теперь закройте документ и откройте его, он больше не будет отображать эту ошибку. Иногда он просто ушел с простым сохранением, но это странно для меня!


одно простое решение в случае, если это небольшой файл:

просто скопируйте все и вставьте его в Word. Он будет обнаруживать содержимое в виде таблиц. Затем выберите все столбцы (не полный стол через крестик в верхнем левом углу) и мимо него в новый .XLS лист и вы будете иметь только четкие значения.