Все константы MS Office



16000+ констант MS Office 2013 для Excel, Word, Access, Outlook, PowerPoint, Project и Visio с краткими описаниями из MSDN, переведены в формат "mxl",
с удобной оболочкой  в виде обработки для отбора и преобразования в другие форматы.
Примеры использования.
Пример получения значений напрямую из Excel (без ВК).

Предыстория: все, кто программно форматировал документы MS Office из 1С сталкивался с обилием констант, которые там используются. Конечно можно использовать числовые значения и переписывать VBA Help в комментарии, но разобраться иногда становиться непросто, особенно, если писалось давно.
Теоретически, идеально было-бы получать значения констант через точку из того-же COM объекта или функцией Evaluate() или Run(), но для констант это не подходит. Придется использовать родные 1С объекты где есть доступ к свойствам через точку или функции, в которых прописаны все значения. Остается запастить этими значениями на все случаи жизни.

 

1) Обработка MSOEnum.epf — позволяет отметить нужные объекты MS Office и вывести их в макет табличного документа, таблицу значений, структуру или генерировать функцию. Опционально описания констант исключаются.

В макете Табличного Документа используются колонки: Параметр, Значение, Описание.
Значения записываются в именованных областях. Таким образом, можно использовать конструкцию:

1С 8

Значение = ПолучитьМакет("МойМакет").Область("ИмяКонстанты").Значение;

Таблица Значений и Структура выводятся во внутреннем формате — готовые к «закладке» в макеты. Колонки Таблицы Значений: Параметр, Значение, Описание.

В связи с использованием 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. В открывшемся конструкторе выбираем стиль, чередование строк, и прочие полезности. Когда в оформлении достигнут желаемый результат — останавливаем макрос (Вид — Макросы — Остановить запись) и забираем код оформления (Макросы — Изменить).
Если потренироваться и под запись не нажимать ничего лишнего код генерируется достаточно чистый.

Результат форматирования

Соответствующий этому форматированию код:

VBA Excel

Sub Макрос1()
‘
‘ Макрос1 Макрос
‘

    ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$A$1:$J$13»), , xlYes).Name = «Таблица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» (чтобы получить некоторую универсальность).

1С 8

Процедура КнопкаВыполнитьНажатие(Элемент)
//Поместим в Структуру константы из макета
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С.


21 Comments

  1. МимохожийОднако

    ОК. Получили список констант. Описание и использование каждой константы на русском языке надо брать в справке к Офису или тоже есть где-то в обработке?

    Reply ↓
  2. TrashMaster

    Подскажете, где достать — поменяю. Справка пишет «Данное содержимое не доступно на вашем языке, используйте версию на английском…». То, что есть в руссой документации тоже не напрягаются переводить.

    Удобнее включить запись макроса, отформатировать документ интерактивно и перекинуть автоматически сгенерированный код в 1с, поправив синтаксис.

    Чтобы заменить константу на другую из этого-же набора нужно глянуть соседние строки в макете или в коде макроса VBA в контекстном меню открыть «Definition».

    По этому поводу добавил примерчик в описание.

    Reply ↓
  3. OrsoBear

    Проходил, знакомо 🙂

    Спасибо за веселые воспоминания!

    Reply ↓
  4. Арчибальд

    Спасибо,отправлю в мемориз.

    Reply ↓
  5. adhocprog

    Фундаментальный труд )

    Стояла такая задача 6 лет назад. Каждый раз вручную смотрел в справке 🙂

    http://infostart.ru/public/163592/

    Сриншот № 1.

    Reply ↓
  6. sergnik

    Спасибо за труды) Часто приходится использовать объекты MS Office, замучался гуглить описания)

    Опенконф для 7.7 конечно же может сам сгенерить описание всех методов, но очень краткое

    Reply ↓
  7. TrashMaster

    (6) sergnik, тут только константы и пример, как заставить офис делать за Вас черную работу. Для остального скачайте себе русскую MSDN и изучейте с комфортом.

    Reply ↓
  8. TrashMaster

    (5) adhocprog, тоже подобный модуль написал в 03 году, тогда это были просто хиты.

    Сейчас снова понадобилось сделать кое-что в excel, но теперь стал ленив — 50 строк кода на парсер и с константами офиса решил закрыть вопрос на все последующие версии.

    Reply ↓
  9. sick_russian

    Спасибо, возьму на заметку, частенько с ВБА работаю)

    Reply ↓
  10. LexSeIch

    Мир этому дому!

    Спасибо за информацию. Пока не качал, но взял на заметку. Плюс однозначно.

    Reply ↓
  11. xzorkiix

    Спасибо — за проделанное. Познавательно. Написано хорошо.

    Reply ↓
  12. Shrek2015

    познавательно. респект!

    Reply ↓
  13. khizhov

    Спасибо что непожалел сил и труда всё это сделать, будет очень полезно

    Reply ↓
  14. Abadonna

    Мне точно не надо, но работа проделана солидная. Плюс

    Reply ↓
  15. TrashMaster

    (14) Abadonna,

    Спасибо! Плюс от Мастера удвоил мою карму.

    Вскрываю карты, как это делается

    Reply ↓
  16. Поручик

    (0) И другие, кому надо

    Список констант Word http://www.progresstalk.com/threads/mail-merge-question.25614/#post-77930

    Ещё здесь есть немного http://wladm.narod.ru/Borland/word.html

    Reply ↓
  17. TrashMaster

    (16) Поручик,

    1) В Word за 16 лет количество констант удвоилось. Сам сначала попробовал использовать функцию с мисты, но не поперло.

    2) OlePropertyGet — надо вызывать в контекстах соответствующих объектов (может ошибаюсь), а их немало. Но можно и так.

    Вопрос в удобстве. Выйдет следующая версия офиса — а парсер msdn уже выложен http://infostart.ru/public/200004/ нажал кнопку, и готово — пошел делать что-нибудь другое.

    Reply ↓
  18. Поручик

    (17) Для большинства приложений в 1С сгодится и такой список. В самом деле, что в основном генерят из 1С для Word и Excel? Относительно несложный документ или таблицу и немного стилевого оформления абзацев или ячеек, то есть применяются константы цветов, шрифтов и выравнивания абзацев.

    Reply ↓
  19. TrashMaster

    (18) Поручик, Согласен, но неприятно, когда в нем чего-то не хватает. Для надежность лучше иметь 100%.

    Бывает, ещё всякая хрень нужна:

    Reply ↓
  20. NAKIS

    Спасибо)) очень полезно)

    Reply ↓
  21. Патриот

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

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *