Подтвердить что ты не робот

Слишком много разных форматов ячеек

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

что я пробовал

Я прочитал некоторые результаты поиска Google, и они говорят, что я должен упростить форматирование, но я даже не знаю, как я получил до 4000 различных форматов ячеек, не говоря уже о том, сколько я использую какие, Я могу удалить некоторые.

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

Кто-нибудь знает

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

Спасибо

4b9b3361

Ответ 1

"Форматы ячеек" сложны. У ячеек действительно нет "формата". У них есть шрифт (который сам имеет имя и размер), NumberFormat, Height, Width, Orientation и т.д.

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

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

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

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

Ответ 2

Проблема, которую вы описали, заставила меня (и коллега) потерять много часов производительности при использовании Excel 2010. Следующий код/​​макрос VBA помог мне удалить файл .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 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

Ответ 3

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

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

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

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

Не нужно подвергать риску дальнейшее повреждение файла, используя Open Офис, как это предлагается на некоторых других форумах

Ответ 4

Исправлены ошибки, приводящие к сообщению об ошибке "Слишком много ячеек" в 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% стилей связаны с файлами без коррупции.

Ответ 5

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

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

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

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

Обновление 2019 года: по этой ссылке они теперь поместили все в большой zip файл с обсуждением проблемы и так далее. В этом zip файле есть еще одна zip-папка с именем source code, в которой вы можете найти файл .xlam.

Ответ 6

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

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

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

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

Отказ от ответственности: у меня есть SpreadsheetGear LLC

Ответ 7

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

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

Когда вы закрываете и снова открываете эту новую таблицу, ваши слишком много проблем с форматами должны исчезнуть.

Ответ 8

Одним из решений может быть использование Утилиты ASAP. В разделе листа есть опция remove all unused styles. По-моему, вам нужно закрыть книгу и снова открыть ее.

Ответ 9

Это приведет к удалению всех стилей EXCEPT для стилей по умолчанию (обычный, пояснительный, 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.locked на самом деле относится к другому, чем "логическое значение, указывающее, заблокирован ли объект".

Ответ 10

Если вы можете открыть файл Try > edit > clear > Formats.

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

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

Ответ 11

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

Проблема может быть устранена с помощью этого инструмента.

Работает с файлами XLS и XLSX.

Ответ 12

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

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

  • Скопируйте рабочий лист в новый файл - он эффективен, но занимает время
  • Удалить диапазоны, которые вы не знаете, каковы они
  • Переформатируйте рабочие листы, чтобы иметь минимальный формат.
  • Очистить весь формат

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

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

Ответ 13

В основном я использовал все ответы здесь, но сообщение об ошибке осталось.

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

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

У меня есть окна семь, поэтому версия 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, снова открыть файл, WORKS (без анонимного предупреждения).

Ответ 14

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

Ответ 15

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

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