Страницы: 1
RSS
Подсчет количества использованных форматов ячеек в Excel 2003
 
Уважаемые коллеги!  
Как я понял, Excel 2003 поддерживает до 4000 уникальных форматов ячеек в одной книге. При превышении возникает сообщение "Слишком много форматов". На практике после возникновения этого сообщения пользователь рискует потерять файл.  
Поискав на форуме, понял, как можно разрешить возникшую проблему, но как ее предупредить - не нашел.  
Есть ли какой-нибудь способ узнать количество уже использованных форматов в файле? Например, с помошью VBA? Если да, то подскажите направление, как это сделать?  
Спасибо!
 
как вариант  
пробежать по всем ws  
для каждой cell  в usedrange сооздать строку, описывающую ее форматирование    
и с помощью nodupes() записывать в коллекцию только уникальные
 
А по подробнее про "Слишком много форматов" нельзя? В первый раз слышу. Откуда звон? Какие форматы имеются в виду? Только на вкладке "Число" или ещё и цвет, шрифт, границы? Тогда вообще хана!  
 
А по поводу предложенного варианта решения, то самое сложное, наверное, будет придумать алгоритм, по которому можно будет "для каждой cell в usedrange сооздать строку, описывающую ее форматирование"
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
почти все описал:  
Sub Макрос2()  
   Selection.Borders(xlDiagonalDown).LineStyle = xlNone  
   Selection.Borders(xlDiagonalUp).LineStyle = xlNone  
   With Selection.Borders(xlEdgeLeft)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeTop)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeBottom)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeRight)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Interior  
       .ColorIndex = 41  
       .Pattern = xlSolid  
       .PatternColorIndex = xlAutomatic  
   End With  
   Selection.Locked = False  
   Selection.FormulaHidden = False  
   With Selection  
       .HorizontalAlignment = xlLeft  
       .VerticalAlignment = xlJustify  
       .WrapText = True  
       .Orientation = 0  
       .AddIndent = False  
       .IndentLevel = 0  
       .ShrinkToFit = False  
       .ReadingOrder = xlContext  
       .MergeCells = False  
   End With  
   With Selection.Font  
       .Name = "Adobe Caslon Pro"  
       .FontStyle = "курсив"  
       .Size = 10  
       .Strikethrough = False  
       .Superscript = False  
       .Subscript = False  
       .OutlineFont = False  
       .Shadow = False  
       .Underline = xlUnderlineStyleDouble  
       .ColorIndex = 46  
   End With  
 
   With Selection.Borders(xlDiagonalDown)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlDiagonalUp)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeLeft)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeTop)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeBottom)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeRight)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
End Sub  
все значения в строку через &  
только зачем?
 
Может быть так:  
Sub dd()  
Dim kol_stiley As Long  
With ActiveWorkbook  
  kol_stiley = .Styles.Count  
End With  
MsgBox "Количество стилей " & kol_stiley  
End Sub
 
sva, количество стилей - это другое. Я запустил проверку в своем файле (в котором количество форматов близко к переполнению - под 4000), количество стилей было 112. А когда в в этом же файле добавляешь еще несколько форматированных ячеек, то сразу сообщение "Слишком много форматов".  
 
С другой стороны - ведь файл Excel хранит где-то в своих недрах информацию о количестве использованных форматов, иначе как определяется момент переполнения форматов? Вот бы понять, где и как достать...:)  
 
Alex_ST  
Имеются в виду все возможные сочетания форматов ячеек - все те свойства, что описаны в сообщении от 16:52.  
 
Спасибо, 16:52 (увы, не знаю Вашего ника:), различие форматов понял. Вы имеете в виду, что нужно создать строку определенной длины типа String для каждой ячейки из usedrange, где каждый знак означает свойство одного из видов формата?
 
{quote}{login=}{date=02.03.2011 04:52}{thema=}{post}почти все описал{/post}{/quote}  
Думаю, что ДАЛЕКО не всё:  
- Interior.ColorIndex может быть 56 различных;  
- размеры шрифта;  
- надстрочный, подстрочный, зачёркнутый...  
- шрифтов различных куча, а если ещё каждому 56 различных цветов... :-)  
Даже не представляю - сколько листов потребуется для описания
 
Вот так можно посчитать часть форматов, по аналогии можно еще сделать.  
Sub get_formats()  
Dim ws As Worksheet, cel As Range  
Dim oCI As Object, oCT As Object  
 
Set oCI = CreateObject("scripting.dictionary")  
Set oCT = CreateObject("scripting.dictionary")  
 
For Each ws In Worksheets  
   For Each cel In ws.UsedRange  
       If cel.Interior.ColorIndex <> xlNone Then 'цвет заливки  
           If Not oCI.exists(cel.Interior.ColorIndex) Then oCI.Add (cel.Interior.ColorIndex), 1  
       ElseIf cel.Font.ColorIndex <> xlNone Then 'цвет шрифта  
           If Not oCT.exists(cel.Font.ColorIndex) Then oCT.Add (cel.Font.ColorIndex), 1  
       End If  
   Next  
Next  
MsgBox oCI.Count + oCT.Count  
Set oCI = Nothing: Set oCT = Nothing  
 
End Sub
 
Не, господа, если форматы - это ВСЁ, что копируется при формате по образцу, то их же чуть ли не бесконечное множество разных сочетаний возможно...  
Взять хоть к примеру границу ячейки:  
- у каждой ячейки может быть до 6 разных границ (верхняя, нижняя, левая, правая, диагональ слева вверх, диагональ слева вниз)  
- каждая из границ может быть нарисована по крайней мере 14-ю типами линий  
- каждая из границ может быть нарисована 56-ю цветами пера  
 
И у каждого из элементов оформления ячейки возможных вариантов не меньше, а то и больше...  
Это же какой длины двоичный код нужно программно формировать для описания всех форматов каждой ячейки? Ну, а параллельно ещё и унификацию коллекции или словаря проводить чтобы число разных узнать...  
Я об этом писАл ещё в 16:44.  
Да уж, если нет возможности заставить сам Ёксель формировать код, полностью описывающий формат ячейки, как он это делает для себя при формате по образцу, то решать эту задачу самому программно - дохлый номер
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=02.03.2011 10:22}{thema=}{post} если форматы - это ВСЁ, что копируется при формате по образцу{/post}{/quote}  
А так оно и есть. Я и говорю - всё, наверное, и не предусмотреть. Разве, что "подсмотреть" каким-то образом у самого Excel :-)
 
Подсчитал количество использованных форматов в своем проблемном файле.    
Создал новый файл с искусственным переполнением форматов, но с одновременным их подсчетом.  
Удалил все стили, остался 1 стиль. Создал блоки ячеек по 80 шт., добавил всем разную заливку, потом начал копировать, меняя размер шрифта, потом болд, курсив и т.д. Так дошел до 4000 тыс. При попытке добавить еще 80 новых возникло сообщение "Слишком много форматов".    
Путем постепенного добавления этих нумерованных форматов из нового файла в проблемный файл (в котором число форматов было неизвестно), коллега подсчитала количество использованных форматов и в нем. При добавлении 1000 форматов возникало сообщение, значит в исходном файле их было 4000 - 1000 = 3000.  
 
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Уважаемый The_Prist!  
Не подскажете, а как в Excel 2007 посмотреть количество форматов?  
Я попробовал сделать так - свой проблемный файл (последний, в котором еще не наступило переполнение форматов) сохранил в формате Excel 2007, дал ему расширение zip и распаковал. Нашел файл styles.xml и в нем увидел следующее:  
numFmts count      15  
fonts count     149  
fills count      38  
borders count     137  
cellStyleXfs count   627  
cellXfs count    2204  
cellStyles count     627  
dxfs count      96  
Общее количество форматов равно 3893, т.е. близко к критическим 4000.  
Так правильно?
 
The_Prist, большое спасибо!  
Сейчас попробую разобраться в этом styles.xlm, что же в конце концов Excel подразумевает под форматом ячейки:)
Страницы: 1
Читают тему
Наверх