Предыстория: все, кто программно форматировал документы MS Office из 1С сталкивался с обилием констант, которые там используются. Конечно можно использовать числовые значения и переписывать VBA Help в комментарии, но разобраться иногда становиться непросто, особенно, если писалось давно.
Теоретически, идеально было-бы получать значения констант через точку из того-же COM объекта или функцией Evaluate() или Run(), но для констант это не подходит. Придется использовать родные 1С объекты где есть доступ к свойствам через точку или функции, в которых прописаны все значения. Остается запастить этими значениями на все случаи жизни.
1) Обработка MSOEnum.epf - позволяет отметить нужные объекты MS Office и вывести их в макет табличного документа, таблицу значений, структуру или генерировать функцию. Опционально описания констант исключаются.
В макете Табличного Документа используются колонки: Параметр, Значение, Описание.
Значения записываются в именованных областях. Таким образом, можно использовать конструкцию:
Значение = ПолучитьМакет("МойМакет").Область("ИмяКонстанты").Значение;
Таблица Значений и Структура выводятся во внутреннем формате - готовые к "закладке" в макеты. Колонки Таблицы Значений: Параметр, Значение, Описание.
В связи с использованием OLE в MS Office - по каждому объекту показано фактически поддерживаемое в нем количество констант. Уникальных констант в итоге меньше на ~1000.
Генерируемая функция совместима с 7.7 и всеми 8.
При генерации макетов "mxl" для 7.7 не забудьте выбрать формат сохранения "Табличный документ v7.7".
2) Обработка ПримерИспользования.epf - для проверки и сравнения методов извлечения.
Из нее можно использовать сводные макеты, минуя предыдущий этап.
Обработка ПримерИспользования.ert - аналогичная предыдущей, для 7.7.
Табличный Документ 8 и Таблица 7.7 оказались наиболее быстрыми объектами на этапе инициализации. У функции единственный недостаток - километр кода.
3) Обработка ДинамическоеВычислениеЗначений.epf - пример вычисления выражений в контексте Excel. Принцип: в Excel создается книга, в которую добавляется и выполняется программный модуль. Для каждого вычисления выполняемая в модуле функция модифицируется.
Требует понижения безопасности до опасного уровня. Только для экспериментов.
Практические приёмы (для начинающих).
Для примера возьмем таблицу Excel, в которую данные добавлены программно и нет никакого оформления и выравнивания.
Оформим её вручную, записав все действия в макрос и затем повторим тоже самое из 1С, чтобы убедиться, как это просто и удобно имея таблицу констант.
Исходная таблица
Откроем книгу с данными в Excel сразу включим запись макроса (Вид - Макросы - Запись макроса - ОК)
Вставляем для используемой области таблицу (Вставка - Таблица) или Ctrl + T. В открывшемся конструкторе выбираем стиль, чередование строк, и прочие полезности. Когда в оформлении достигнут желаемый результат - останавливаем макрос (Вид - Макросы - Остановить запись) и забираем код оформления (Макросы - Изменить).
Если потренироваться и под запись не нажимать ничего лишнего код генерируется достаточно чистый.
Результат форматирования
Соответствующий этому форматированию код:
Sub Макрос1()
'
' Макрос1 Макрос
'
Range("Таблица1[#All]").Select
ActiveSheet.ListObjects("Таблица1").TableStyle = "TableStyleLight21"
ActiveSheet.ListObjects("Таблица1").ShowTotals = False
ActiveSheet.ListObjects("Таблица1").ShowAutoFilterDropDown = False
ActiveSheet.ListObjects("Таблица1").ShowTableStyleLastColumn = True
ActiveSheet.ListObjects("Таблица1").ShowTableStyleColumnStripes = False
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End Sub
Для адаптации кода в 1С нам нужно указать в параметрах COM объекты, а вместо фиксированной области использовать рабочую "UsedRange" (чтобы получить некоторую универсальность).
Процедура КнопкаВыполнитьНажатие(Элемент)
//Поместим в Структуру константы из макета
xl = ЗначениеИзСтрокиВнутр( ПолучитьМакет("MSConst_Структура").ПолучитьТекст() );
//Откроем книгу, выделим используемый диапазон
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = Ложь;
Excel.EnableEvents = Ложь;
Excel.Workbooks.Open("E:\Книга1.xlsx");
ActiveSheet = Excel.ActiveSheet;
ActiveSheet.UsedRange.Select();
//Тут практически текст VBA. К именам констант дописываем нашу Структуру "xl"
Таблица1 = ActiveSheet.ListObjects.Add(xl.xlSrcRange, ActiveSheet.UsedRange, , xl.xlYes);
Таблица1.Name = "Таблица1";
Таблица1.TableStyle = "TableStyleLight21";
Таблица1.ShowTotals = False;
Таблица1.ShowAutoFilterDropDown = False;
Таблица1.ShowTableStyleLastColumn = True;
Таблица1.ShowTableStyleColumnStripes = False;
Excel.Selection.HorizontalAlignment = xl.xlGeneral;
Excel.Selection.VerticalAlignment = xl.xlCenter;
Excel.Selection.WrapText = True;
Excel.Selection.Orientation = 0;
Excel.Selection.AddIndent = False;
Excel.Selection.IndentLevel = 0;
Excel.Selection.ShrinkToFit = False;
Excel.Selection.ReadingOrder = xl.xlContext;
Excel.Selection.MergeCells = False;
//Покажем результат
Excel.Visible = Истина;
Excel.DisplayAlerts = Истина;
Excel.EnableEvents = Истина;
КонецПроцедуры
Сложное форматирование лучше записывать с остановками в несколько макросов, давая им осмысленные имена.
Так будет проще разбираться с кодом, а имена макросов пригодятся для комментариев в 1С.