gifts2017

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

Опубликовал TrashMaser TrashMaster@ro.ru (TrashMaster) в раздел Программирование - Инструментарий

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С.


Скачать файлы

Наименование Файл Версия Размер
Все файлы одним архивом 143
.zip 2,21Mb
22.07.13
143
.zip 2,21Mb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр (МимохожийОднако) 24.07.13 06:47
ОК. Получили список констант. Описание и использование каждой константы на русском языке надо брать в справке к Офису или тоже есть где-то в обработке?
2. TrashMaser TrashMaster@ro.ru (TrashMaster) 24.07.13 10:03
Подскажете, где достать - поменяю. Справка пишет "Данное содержимое не доступно на вашем языке, используйте версию на английском...". То, что есть в руссой документации тоже не напрягаются переводить.
Удобнее включить запись макроса, отформатировать документ интерактивно и перекинуть автоматически сгенерированный код в 1с, поправив синтаксис.
Чтобы заменить константу на другую из этого-же набора нужно глянуть соседние строки в макете или в коде макроса VBA в контекстном меню открыть "Definition".
По этому поводу добавил примерчик в описание.
3. Alex Steiner (OrsoBear) 26.07.13 08:39
Проходил, знакомо :-)
Спасибо за веселые воспоминания!
4. Александр Рытов (Арчибальд) 26.07.13 10:19
Спасибо,отправлю в мемориз.
5. Владимир Гусев (adhocprog) 26.07.13 15:34
Фундаментальный труд )
Стояла такая задача 6 лет назад. Каждый раз вручную смотрел в справке :)
http://infostart.ru/public/163592/
Сриншот № 1.
6. Serg Nyk (sergnik) 26.07.13 17:53
Спасибо за труды) Часто приходится использовать объекты MS Office, замучался гуглить описания)
Опенконф для 7.7 конечно же может сам сгенерить описание всех методов, но очень краткое
7. TrashMaser TrashMaster@ro.ru (TrashMaster) 26.07.13 20:25
(6) sergnik, тут только константы и пример, как заставить офис делать за Вас черную работу. Для остального скачайте себе русскую MSDN и изучейте с комфортом.
8. TrashMaser TrashMaster@ro.ru (TrashMaster) 26.07.13 21:13
(5) adhocprog, тоже подобный модуль написал в 03 году, тогда это были просто хиты.
Сейчас снова понадобилось сделать кое-что в excel, но теперь стал ленив - 50 строк кода на парсер и с константами офиса решил закрыть вопрос на все последующие версии.
9. Виталий Быков (sick_russian) 29.07.13 09:06
Спасибо, возьму на заметку, частенько с ВБА работаю)
10. Сергей Маслов (LexSeIch) 01.08.13 11:08
Мир этому дому!
Спасибо за информацию. Пока не качал, но взял на заметку. Плюс однозначно.
11. Евгений Шабалин (xzorkiix) 19.08.13 11:29
Спасибо - за проделанное. Познавательно. Написано хорошо.
12. Shrek Shrek (Shrek2015) 19.08.13 14:34
познавательно. респект!
13. Олег Хижов (khizhov) 29.08.13 10:33
Спасибо что непожалел сил и труда всё это сделать, будет очень полезно
14. Аркадий Кучер (Abadonna) 31.08.13 07:36
Мне точно не надо, но работа проделана солидная. Плюс
15. TrashMaser TrashMaster@ro.ru (TrashMaster) 06.09.13 10:56
(14) Abadonna,
Спасибо! Плюс от Мастера удвоил мою карму.

Вскрываю карты, как это делается
16. Сергей Ожерельев (Поручик) 07.09.13 17:02
(0) И другие, кому надо
Список констант Word http://www.progresstalk.com/threads/mail-merge-question.25614/#post-77930
Ещё здесь есть немного http://wladm.narod.ru/Borland/word.html
TrashMaster; +1 Ответить 1
17. TrashMaser TrashMaster@ro.ru (TrashMaster) 07.09.13 18:49
(16) Поручик,
1) В Word за 16 лет количество констант удвоилось. Сам сначала попробовал использовать функцию с мисты, но не поперло.
2) OlePropertyGet - надо вызывать в контекстах соответствующих объектов (может ошибаюсь), а их немало. Но можно и так.
Вопрос в удобстве. Выйдет следующая версия офиса - а парсер msdn уже выложен http://infostart.ru/public/200004/ нажал кнопку, и готово - пошел делать что-нибудь другое.
18. Сергей Ожерельев (Поручик) 07.09.13 19:43
(17) Для большинства приложений в 1С сгодится и такой список. В самом деле, что в основном генерят из 1С для Word и Excel? Относительно несложный документ или таблицу и немного стилевого оформления абзацев или ячеек, то есть применяются константы цветов, шрифтов и выравнивания абзацев.
19. TrashMaser TrashMaster@ro.ru (TrashMaster) 07.09.13 20:08
(18) Поручик, Согласен, но неприятно, когда в нем чего-то не хватает. Для надежность лучше иметь 100%.
Бывает, ещё всякая хрень нужна:
20. Денис Луцик (NAKIS) 18.12.13 12:05
Спасибо)) очень полезно)
21. Александр Полтава (Патриот) 24.11.14 13:39
Однозначно плюс! Раньше приходилось каждую константу в справке смотреть, теперь не надо, и к тому же код будет наряднее, когда вместо цифры имя константы будет.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа