с удобной оболочкой в виде обработки для отбора и преобразования в другие форматы.
Примеры использования.
Пример получения значений напрямую из Excel (без ВК).
Предыстория: все, кто программно форматировал документы 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 Макрос
‘
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» (чтобы получить некоторую универсальность).
Процедура КнопкаВыполнитьНажатие(Элемент)
//Поместим в Структуру константы из макета
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С.
ОК. Получили список констант. Описание и использование каждой константы на русском языке надо брать в справке к Офису или тоже есть где-то в обработке?
Подскажете, где достать — поменяю. Справка пишет «Данное содержимое не доступно на вашем языке, используйте версию на английском…». То, что есть вруссой документации тоже не напрягаются переводить.
Удобнее включить запись макроса, отформатировать документ интерактивно и перекинуть автоматически сгенерированный код в 1с, поправив синтаксис.
Чтобы заменить константу на другую из этого-же набора нужно глянуть соседние строки в макете или в коде макроса VBA в контекстном меню открыть «Definition».
По этому поводу добавил примерчик в описание.
Проходил, знакомо 🙂
Спасибо за веселые воспоминания!
Спасибо,отправлю в мемориз.
Фундаментальный труд )
http://infostart.ru/public/163592/
Стояла такая задача 6 лет назад. Каждый раз вручную смотрел в справке 🙂
Сриншот № 1.
Спасибо за труды) Часто приходится использовать объекты MS Office, замучался гуглить описания)
Опенконф для 7.7 конечно же может сам сгенерить описание всех методов, но очень краткое
(6) sergnik, тут только константы и пример, как заставить офис делать за Вас черную работу. Для остального скачайте себе русскую MSDN и изучейте с комфортом.
(5) adhocprog, тоже подобный модуль написал в 03 году, тогда это были просто хиты.
Сейчас снова понадобилось сделать кое-что в excel, но теперь стал ленив — 50 строк кода на парсер и с константами офиса решил закрыть вопрос на все последующие версии.
Спасибо, возьму на заметку, частенько с ВБА работаю)
Мир этому дому!
Спасибо за информацию. Пока не качал, но взял на заметку. Плюс однозначно.
Спасибо — за проделанное. Познавательно. Написано хорошо.
познавательно. респект!
Спасибо что непожалел сил и труда всё это сделать, будет очень полезно
Мне точно не надо, но работа проделана солидная. Плюс
(14) Abadonna,
Спасибо! Плюс от Мастера удвоил мою карму.
(0) И другие, кому надо
http://www.progresstalk.com/threads/mail-merge-question.25614/#post-77930
http://wladm.narod.ru/Borland/word.html
Список констант Word
Ещё здесь есть немного
(16) Поручик,
http://infostart.ru/public/200004/ нажал кнопку, и готово — пошел делать что-нибудь другое.
1) В Word за 16 лет количество констант удвоилось. Сам сначала попробовал использовать функцию с мисты, но не поперло.
2) OlePropertyGet — надо вызывать в контекстах соответствующих объектов (может ошибаюсь), а их немало. Но можно и так.
Вопрос в удобстве. Выйдет следующая версия офиса — а парсер msdn уже выложен
(17) Для большинства приложений в 1С сгодится и такой список. В самом деле, что в основном генерят из 1С для Word и Excel? Относительно несложный документ или таблицу и немного стилевого оформления абзацев или ячеек, то есть применяются константы цветов, шрифтов и выравнивания абзацев.
(18) Поручик, Согласен, но неприятно, когда в нем чего-то не хватает. Для надежность лучше иметь 100%.
Бывает, ещё всякая хрень нужна:
Спасибо)) очень полезно)
Однозначно плюс! Раньше приходилось каждую константу в справке смотреть, теперь не надо, и к тому же код будет наряднее, когда вместо цифры имя константы будет.