Публикуется первая глава бесплатного курса основы разработки для Р7 . Дополнительные материалы можно найти вот тут

Особенности разработки в MS Office (Excel)

Базовым средством автоматизации в офисном пакете Microsoft Office, в течение длительного времени (С 1996 года по настоящее время) является скриптовый язык VBA (VisualBasic for Application). C 2007 года VBA не лицензируется для других разработчиков. Согласно статьи в Википедии , посвященной VBA, этот язык является неким упрощенным подмножеством языка VisualBasic.

Рассмотрим некоторые особенности VBA, которые потом будут являться основой для средств автоматизации в Р7:

  • Хотя язык VBA и не является полноценным объектно-ориентированным, в его структуру разработчики внедрили «объектную модель» как самого приложения, так и структуры документа этого приложения. Пользователь прямо «из коробки» получает возможность с помощью скриптов влиять на состояние программы и активного документа.

  • Ещё одним огромным плюсом MS Office является возможность записи ручных действий пользователя (причем как действий с интерфейсом самой программы, так и действий с документом) в программный код VBA, который далее можно запустить, чтобы повторить последовательность действий. Это и есть изначальная идея макросов.

  • Возможность визуального построения средств графического интерфейса между пользователем и программным продуктом, за что VBA и получил в названии слово Visual (визуальный). Это позволяет построить сложные среды для работы пользователя, с развитой логикой работы, которая может включать в себя процессы, связанные с другими программными продуктами внутри офисного пакета.

  • Изначально VBA использует глубокую интеграцию с технологиями системной программной автоматизации Microsoft, такими как ActiveX, COM и OLE. Поскольку эти технологии лежат в основе самой объектной модели VBA, Microsoft Office и тех программных продуктов, где происходит интеграция VBA как языка автоматизации, внедрение этих технологий скрыто от конечного пользователя. Это упрощает работу с ними и расширяет возможности пользовательских форм макросов, позволяя внедрять готовые сторонние решения легким по сравнению со многими другими языками программирования способами.

  • VBA имеет встроенную возможность использовать системные или прикладные библиотеки (dll), тем самым давая возможность пользователю интегрировать заложенные в этих библиотеках функции в свои макросы, расширяя их возможности за счёт уже готовых API, как операционной системы Windows, так и любых других API, зарегистрированных в операционной системе.

  • Для построения сложных макросов или редактирования записанных, используется интегрированная в приложение среда разработки (IDE - Integrated Development Environment ). IDE устарела, но до сих пор предоставляет все необходимые базовые возможности по разработке и отладке.

Помимо VBA, в более поздних версиях были добавлены средства автоматизации (в том числе и интегрированные) на других языках программирования(C++,C#), такие как VSTA (Visual Studio Tools for Applications). Добавлена поддержка построения макросов на языках Python. Помимо этого, появилась форма дополнительной функциональности офисных пакетов, называемая расширением (add-in) на языке JavaScript. Функциональность и принципы построения расширений выходят за рамки данного курса.

Особенностью использования VBA в Microsoft Office является то, что макросы не могут использоваться отдельно, вне документов. Для своего использования макрос должен быть сохранён в составе документа, и для повторного использования он должен быть открыт в редакторе.

Если требуется независимая от документов дополнительная функциональность, следует создавать расширение (add-in) и инсталлировать его с помощью средств офиса.

Особенности разработки в Р7-Офис JavaScript

В офисном пакете Р7 есть два типа встраиваемой автоматизации действий пользователя: макросы и плагины.

Макросы - это скрипты автоматизации, интегрированные в документ и действующие только в рамках этого документа. Макросы в Р7, в отличие от MS Office, не могут записывать действия пользователя в скрипт с последующим воспроизведением таких действий. Для макросов используется встроенный в редактор плагин «макрос», который, хотя и ограничен по функциональности по сравнению с полноценными IDE, не требует отдельного внешнего редактора. В него интегрирован простейший отладчик, позволяющий ставить точки останова и просматривать значения некоторых из переменных при остановке, что полезно при разработке макросов.

Плагины - это независимые от документов наборы файлов, упакованные как zip архив (с расширением .plugin) и инсталлированные в приложения. Плагины могут иметь отдельный интерфейс пользователя, построенный по технологии HTML, CSS и JavaScript. Для их создания можно использовать любой редактор программного кода, поддерживающий JavaScript, например, Microsoft Visual Studio Code. Отладка плагинов может производиться только при использовании ключа запуска приложения «--ascdesktop-support-debug-info». Это позволяет после запуска плагина через контекстное меню редактора вызывать DevTools, представляющую собой среду отладки Chromium, на базе которого построен интерфейс редакторов Р7.

Процесс создания и отладки макросов и плагинов будет рассмотрен позже на соответствующих занятиях. Для создания своих средств автоматизации в редакторе Р7-Офис требуется базовое знание скриптового языка JavaScript, языка веб-разметки HTML и языка форматирования CSS. В рамках вводного курса будет рассмотрен JavaScript в минимальном объеме. Языки HTML и CSS придется изучить самостоятельно.

API для работы с приложением и документами предоставлено в ограниченном объёме, не все возможности доступные пользователю при работе с редактором и документами доступны для автоматизации в плагинах и макросах. В связи с особенностью архитектуры самого редактора очень ограничены возможности по взаимодействию между плагином и операционной системой. Например, нельзя штатными способами сохранить данные в произвольный файл на жесткий диск или организовать взаимодействие между плагином и внешними программами без использования квази-прокси серверов. Все подобные ограничения будут рассмотрены на соответствующих занятиях.

Основные различия разработки MS Office от Р7-Офис

Основные различия в разработке средств автоматизации в MS Office от Р7-Офис состоят в следующем:

MS Office

Р7-Офис

Язык разработки

VBA (для макросов) JavaScript (для add-in)

JavaScript (для макросов и плагинов)

Среда разработки

Встроенная IDE

Встроенный плагин -редактор макросов (но очень ограниченный по функциональности) , и только внешняя для плагинов (любая среда с поддержкой разработки на html +css+ javascript)

Запись действий пользователя в макрос

Почти полная поддержка

Отсутствует

Возможность работы с функциями ОС

Полная поддержка

Возможности ограничены требованиями безопасности для Web приложений (например, нельзя сохранить файлы на жесткий диск)

Взаимодействие с API приложения

Полная поддержка

Есть ограничения и далеко не все функции доступны при разработке

Взаимодействие с API документов

Полная поддержка

Есть ограничения и далеко не все функции доступны при разработке

Возможность использования внешних библиотек

Полная поддержка

Ограничены возможностями JavaScript и различных фреймворков на его базе

Возможности программирования форм пользователя

Используется модель WindowsForms

Все доступные возможности построения интерфейсов на базе HTML+ JavaScript

Как видно из этой таблицы, в силу ограничений как самой архитектуры приложений Р7, так и реализации его API на текущий момент, перенос макросов для ряда задач, созданных в MS Office, в Р7 не представляется возможным без привлечения внешних серверных расширений. Это может привести к частичному использованию всего накопленного опыта автоматизации в VBA.

Различия между языками программирования (VBA и JavaScript) потребуют наличия специалистов, хорошо разбирающихся в особенностях программирования макросов на VBA в MS Office и JavaScript в Р7-Офис при переходе между офисными пакетами. Тем не менее, для большинства задач такой процесс возможен, хотя и с указанными выше оговорками и ограничениями. Примеры таких переходов будут рассмотрены на последующих занятиях.

Комментарии (20)


  1. LuchS-lynx
    02.08.2024 15:36
    +7

    • Для построения сложных макросов или редактирования записанных, используется интегрированная в приложение среда разработки (IDE - Integrated Development Environment ). IDE устарела, но до сих пор предоставляет все необходимые базовые возможности по разработке и отладке.

    Базовые? Эта IDE до сих пор является лучшей среди всех IDE для макросов присутствующих среди всех офисных пакетов!!! Особенно по сравнению с Р7 (он же OnlyOffice). Кроме того из-за того что разработчики офисного ПО (за искл. Libre/OnlyOffice, а так же их форков, и полумифического VBA в WPS Office и то только в платной версии и то только под винду) блокируют обращение к диску, а в некоторых случаях даже к системному времени (МойОфис привет). Из-за чего без использования внешних языков программирования невозможно создавать/править файлы макросами, что резко сужает возможности малой автоматизации и, как следствие, приведет к падению индивидуальной эффективности сотрудников, основанной на наработках прошлого. Для многих это будет означать (в случае импортозамещения ПО на рабочем месте с 01.01.2025, а местами уже сейчас) проблемы, как следствие возрастание рисков для организаций - работодателей.

    Различия между языками программирования (VBA и JavaScript) потребуют наличия специалистов, хорошо разбирающихся в особенностях программирования макросов на VBA в MS Office и JavaScript в Р7-Офис при переходе между офисными пакетами. Тем не менее, для большинства задач такой процесс возможен, хотя и с указанными выше оговорками и ограничениями.

    только полное переписывание кода c выносом его за пределы офисного пакета программ, например python/php/Lazarus/java/и т.д. и т.п., или замена MS Office на Libre/OnlyOffice, в случае если принципиально офисное ПО из реестра, то использование форка AlterOffice, который в реестре есть.


    1. kompilainenn2
      02.08.2024 15:36

      Libre/OnlyOffice

      наверное имелось ввиду Libre/OpenOffice ? а то вы сами себе противоречите в эмоциях =)


      1. LuchS-lynx
        02.08.2024 15:36
        +1

        Очепятался. Каюсь, грешен.


    1. Surrogate
      02.08.2024 15:36

      в случае импортозамещения ПО на рабочем месте с 01.01.2025,

      Это точно? Я просто смотрю в вакансиях Ростелекома и других около-государственных контор встречаются вакансии на спецов по MS Office+VBA.


      1. LuchS-lynx
        02.08.2024 15:36

        Это точно? Я просто смотрю в вакансиях Ростелекома и других около-государственных контор встречаются вакансии на спецов по MS Office+VBA.

        Указ Президента Российской Федерации от 30.03.2022 № 166 "О мерах по обеспечению технологической независимости и безопасности критической информационной инфраструктуры Российской Федерации"


        1. Surrogate
          02.08.2024 15:36

          Указ Президента Российской Федерации от 30.03.2022 № 166

          Защищать должны КИИ на каких то технологических площадках или где хранятся данные представляющие ГосТайну? Или даже в бухгалтерии ЖЭКа нужно импортозамещаться?

          Я просто смотрю в вакансиях Ростелекома и других около-государственных контор встречаются вакансии на спецов по MS Office+VBA.

          Одна из таких вакансий: то ли они не знают что в январе за MS Office в работе можно забыть?


          1. LuchS-lynx
            02.08.2024 15:36

            Защищать должны КИИ на каких то технологических площадках или где хранятся данные представляющие ГосТайну? Или даже в бухгалтерии ЖЭКа нужно импортозамещаться?

            Если организация/фирма/предприятие относится к КИИ, то иностранное ПО должно быть полностью замещено на отечественное или "отечественное", главное что бы оно было в реестре отечественного ПО.

            о КИИ
            о КИИ

            При этом написано в указе, что запрещено использовать такое ПО на объектах КИИ, это косвенно налагает ограничения и на Подрядчиков, которые будут выполнять такие работы.

            Одна из таких вакансий: то ли они не знают что в январе за MS Office в работе можно забыть?

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


            1. Surrogate
              02.08.2024 15:36

              но он не будет работать пока за него не начнут спрашивать

              Ясно, пока за использование MS Office не начнут карать 7 годами расстрелов на урановых рудниках при температуре -40°C ничего не изменится.


      1. Matilda_T
        02.08.2024 15:36

        Возможно, для 90% сотрудников таких компаний импортозаместят MS Office. Но для оставшихся 10% - будет доступен MS Office, так как во многих крупных компаниях до сих пор имеются инструменты на VBA, разработанные много лет назад, но до сих пор вполне успешно решающие некий круг задач.


  1. Matilda_T
    02.08.2024 15:36
    +2

    Особенностью использования VBA в Microsoft Office является то, что макросы не могут использоваться отдельно, вне документов. Для своего использования макрос должен быть сохранён в составе документа, и для повторного использования он должен быть открыт в редакторе.

    Если требуется независимая от документов дополнительная функциональность, следует создавать расширение (add-in) и инсталлировать его с помощью средств офиса.

    Мне кажется, забыли про Personal Macro Workbook, который и используется, когда "требуется независимая от документов дополнительная функциональность" на VBA.


    1. economist75
      02.08.2024 15:36
      +1

      Еще лучше - один ReadOnly-файл "надстройки" *.xlam, расшаренный по сети LAN и подключенный на всех Excel/Calc у пользователей. Это по сути сетевая "корпоративная" библиотека макросов, в которой может быть автоматизировано большое число бизнес-процессов, не привлекая внимания СБ, IT и санитаров.

      VBA-разработчики неспешно правят *.xlam (напрямую или правят свой и обновляют файл с заменой и восст. реквизита ReadOnly), а другие пользователи - незаметно для себя читают его при каждом открытии Excel/Calc. Это CI/СD.
      Еще правильнее развернуть локальный Gitlab и собирать *.xlam из *.bas-файлов (исходных кодов) с автотестами.

      Поясню за OpenOffice|LibreOffice Calc: сам он не поддерживает механизм "надстроек", но прекрасно читает макросы из XLAM-файлов (ведь это обычные xlsm-файлы с другим расширением). Совместимость VBA-кода для Calc - высокая, ~80%.

      Если при работе макрорекордера не суетиться и избегать записи неподдерживаемых в Calc VBA-методов - делать кросс-офисные макроcы можно с прежней скоростью: очень быстро. По сравнению с классической разработкой - мгновенно.


  1. MiIs
    02.08.2024 15:36

    Хотя язык VBA и не является полноценным объектно-ориентированным,

    Вообще-то является. Есть возможность создавать классы - Class Module, в них определять Функции (Function), Процедуры(Sub), Свойства (Property Get, Set, Let), переменные класса, и даже события (Events) и потом использовать это в своем коде.

    Особенностью использования VBA в Microsoft Office является то, что макросы не могут использоваться отдельно, вне документов.

    При небольшой доработке могут - это называется VBScript, который имеет еще дополнительные объекты по сравнению с VBA вроде словаря, регулярок и т.д. VBScript-у для выполнения скриптов под Ms Office конечное же нужен будет установленный Ms Office на компе.


  1. firehacker
    02.08.2024 15:36

    скриптовый язык VBA

    ОН НЕ СКРИПТОВЫЙ!


  1. KEugene
    02.08.2024 15:36

    Особенностью использования VBA в Microsoft Office является то, что макросы не могут использоваться отдельно, вне документов. Для своего использования макрос должен быть сохранён в составе документа, и для повторного использования он должен быть открыт в редакторе

    Всегда можно сохранить в vbs и в начале дописать "стартовый" объект - приложение. Это если совсем вне офиса запускать.

    И да, есть Личная книга макросов Экселя или основной шаблон Ворда, чтобы не было привязки к документам.


  1. Yur_belov
    02.08.2024 15:36

    Макросы - зло. Вселенское. Если вдруг компания начнёт расти - эти миазмы "малой автоматизации" вырастают до раковых опухолей. Я за время работы в МойОфис такого навидался, что глаз до сих пор дёргается. Целые ERP и системы бухгалтерского учёта были построены на этом зле. Файлы с макросами разбухали до 100-400мб и десятками выгружались в общий сетевой диск, и потом другой документ с супер-макросом всё это обрабатывал ради... 1 странички с диаграммой для топ-менеджмента. Пользовались этим адом сотни сотрудников. И если выходило какое-то обновление - то не все его видели/получали. И это всё регулировалось регламентами компании. И, думаю, не надо упоминать, что происходит, когда у сотрудника "не так версия отчёта". А уж если про ИБ начать общаться... Ммм...

    Если необходимо автоматизированное создание документа, в идеале надо перестать быть локальными кодерком, включить внутреннего архитектора и сциентиста. Обучиться разработке на любой платформе автоматизации, которая внедрена в вашей компании (1С как минимум у всех есть) и автоматизируем всё там. И уже там всё реализовать. Централизация в таких вопросах крайне важна. Ну и про преемственность технологий тоже забывать не стоит. Как много разработчиков макросов/плагинов для офисных пакетов? И как много разработчиков под любые корпоративные системы?


    1. Surrogate
      02.08.2024 15:36

      Если необходимо автоматизированное создание документа, в идеале надо перестать быть локальными кодерком, включить внутреннего архитектора и сциентиста.

      На такое способны лишь все

      Целые ERP и системы бухгалтерского учёта были построены на этом зле

      Не думаю, что до такого доходит большинство компаний. А как средство "малой автоматизации" очень выручают!


    1. LuchS-lynx
      02.08.2024 15:36

      У всех этих решений, которые круче MS Office Есть одна проблема - неудобные интерфейсы ввода, которые крадут тучу времени на вводе по сравнению с фронтендом на базе тех же электронных таблиц, зато быстрее обрабатывает, ничего не теряет и все такое.


    1. economist75
      02.08.2024 15:36
      +1

      В отличие от VBA, не меняющегося с 1995 г., та же 1С, ее маркетологи, сделали всё (новыми версиями платформ и чехардой конфигураций), чтобы доморщенных автоматизаторов свести в 0, и чтобы "в одно лицо" невозможно было сделать ни один весомый IT-проект в ней. Без чисел нехорошо, поэтому вот: сколько должно быть таблиц в БД учетной системы? 100? 1000? А не хотели 10000, как в УПП?! Вы можете представить DBA-человека c пониманием этой схемы данных?

      VBA хоронят каждый год примерно с 2000-х. Разработчиков на VBA несколько десятков миллионов, и через 20 лет их будет столько же. А вот что будет с 1С - посмотрим. Их монопольное положение и мышление - пагубно. И в конечном итоге приведет к появлению простого и мощного конкурента, который свергнет лидера. Лимит усложнения систем от 1С исчерпан. "Всё реализовать внутри 1С" не вышло ни у кого, пройдите по заводам. Говорю об этом с горечью, надежды в эпоху 7.7 и первых 8-к были.


  1. EvgeniyRasyuk Автор
    02.08.2024 15:36

    приглашаю в сообщество разработчиков макросов Р7 / OnlyOffice
    https://t.me/R7JavaScript


  1. Sergostan
    02.08.2024 15:36

    Как же я люблю VBA. Сколько рутины он перелопатил за годы моего использования.