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