Руководство по работе с макросами в Р7-Офис
- Начало работы с макросами
- Написание собственных макросов
- Конвертация макросов MS VBA
- Полезные примеры макросов
Макросы в редакторах Р7-Офис – это скрипты, с помощью которых можно автоматизировать рутинные операции с разными типами документов. В макросах используется синтаксис языка JavaScript и скрипты API Генератора документов, поэтому макросы поддерживают методы, доступные в JavaScriptи методы, которые поддерживает Генератор документов.
Вы можете добавлять в документы свои собственные макросы (поддерживаются все типы документов: текстовые документы, электронные таблицы, презентации), редактировать их и сохранять, чтобы сделать работу с документами еще проще и удобнее.
Начало работы с макросами
Макрос – это функция JavaScript, связанная с документом. Самая простая функция, при запуске вставляющая в документ текст "Hello world!", выглядит следующим образом:
|
В интерфейсе десктопных редакторов это выглядит так:
Для доступа к макросу, откройте или создайте документ нужного типа, нажмите кнопку плагинов и выберите Макросы. Откроется окно макросов. Нажмите Создать и введите ваш код скрипта в окно с правой стороны. Когда закончите, нажмите Выполнить для запуска кода в документе.
Вы также можете переименовать ваш макрос для того, чтобы отличать его от других в случае, если в документе несколько макросов, либо удалить ненужные.
Написание собственных макросов
Теперь, когда вы знаете, как работают макросы, давайте попробуем написать собственный макрос. К примеру, у нас есть таблица, в которой нужно раскрасить строки в разные цвета: нечётные строки в зелёный, а чётные в красный. В таблице 200 строк (если делать всё вручную, это займёт немало времени) и столбцы от A до S.
- Откройте десктопные редакторы и создайте новую таблицу.
- Откройте плагины и выберите Макросы. Откроется окно макросов.
- Нажмите Создать.
- Создастся базовый шаблон функции,в который можно вставить нужный код:
|
Что нужно для выполнения нашей задачи:
- Сначала нужно получить текущий лист с помощью метода GetActiveSheet:
- Затем создадим цикл,который пройдёт от первого до последней строки таблицы:
|
- Теперь зададим две переменных: одну для нечётных строк, вторую для чётных:
|
- Теперь мы можем раскрасить нечётные и чётные строки в нужные цвета. Установим эти цвета с помощью метода CreateColorFromRGB. Диапазон ячеек внутри ряда можно получить с помощью метода GetRange, цвет для нечётных строк устанавливается так:
|
- То же самое для чётных строк, но цвет будет другим:
|
Давайте подведём итог и запишем весь код:
|
Вставьте код из примера выше в окно макросов и нажмите Выполнить. Строки таблицы с 1 по 200 будут раскрашены в разные цвета менее чем за секунду.
Конвертация макросов MS VBA
Макросы в редакторах отличаются от макросов, используемых в программах Microsoft, поскольку в программных продуктах Microsoft и спользуется скриптовый язык Visual Basic для приложений(VBA).Язык JavaScript является более гибким и может использоваться на любой платформе(что важно, поскольку наши редакторы доступны на разных платформах).
Это может быть причиной определённых неудобств в том случае,если до этого вы работали с Microsoft Office с использованием макросов, поскольку они несовместимы с макросами на JavaScript. Однако вы можете сконвертировать ваши старые макросы и использовать их с новыми редакторами.
Это не сложный процесс. Рассмотрим пример:
|
Макрос выше считает сумму значений из трёх диапазонов ячеек столбца A и помещает результат в три ячейки столбца B.
Всё то же самое можно выполнить с помощью макросов JavaScript, код будет выглядеть почти идентично и легко читаем, если вы знаете и Visual Basic для приложений и JavaScript:
|
Таким же образом можно сконвертировать любой другой скрипт, написанный на Visual Basic для приложений,в код JavaScript, который будет совместим с нашими редакторами.
Полезные примеры макросов
Примеры на этой странице продемонстрируют использование макросов и дадут возможность сравнить макросы, написанные на JavaScript,с макросами, написанными на Microsoft Visual Basic для приложений, чтобы вы могли увидеть разницу и понять, как можно сконвертировать уже имеющиеся макросы.
Запись данных в ячейку таблицы
В этом примере мы запишем данные(фразу "Hello world") в ячейку, находящуюся в четвёртом столбце третьего ряда:
|
Объединение и отмена объединения ячеек выбранного диапазона
В этом примере мы объединим ячейки одного диапазона и отменим объединение ячеек другого диапазона:
|
Установка ширины столбца
В этом примере мы установим ширину второго столбца("B"):
|
Форматирование диапазона как таблицы
В этом примере мы отформатируем диапазон ячеек в таблицу:
|
в VBA Microsoft Excel есть UserForm для создания форм, где можно создать поля для ввода значений, списки, кнопки и т.д.. Интересно при создании макросов в Р7 есть что-то подобное?
Как написать код= Сохранить определенный лист в новой книге в формате csv или docx с именем, которое формируется из ячейки A1; A2 и A3 копируемого листа
а на питоне макросы писать можно?
вопрос не праздный, я начал учить питон чтобы писать для компаса, а тут еще JS учить.
Господи! За что? А можно пожалуйста оставить VBA?
"Однако вы можете сконвертировать ваши старые макросы и использовать их с новыми редакторами... код будет выглядеть почти идентично и легко читаем, если вы знаете и Visual Basic для приложений и JavaScript"...
Гм... И где здесь конвертация? Типа, если знаете и VBA, и JS, то легко сможете переписать свои макросы?.. шутники...
Здравствуйте. Поправьте пожалуйста пример кода на JS в разделе "КОНВЕРТАЦИЯ МАКРОСОВ MS VBA" (или это такой прикол? Потролить потенциальных пользователей... типа "ну как то так, мы сами хз... ))) вместо условных переходов кейсами вот вам жирный цветной текст")
Я конечно не спец по Java, но по-моему скрипт ниже не "считает сумму значений из трёх диапазонов ячеек столбца A и помещает результат в три ячейки столбца B."
По некоторым другим примерам у меня тоже подозрение в правильности.
(function()
{
Api.GetActiveSheet().GetRange("A2").SetBold(true); Api.GetActiveSheet().GetRange("B4").SetFontColor(Api.CreateColorFromRGB(255, 0, 0));
Api.GetActiveSheet().GetRange("B3").SetFillColor(Api.CreateColorFromRGB(0, 0, 250));
}) ();
Это такой толстый троллинг потенциальных пользователей... типа "ну как то так, мы сами хз... ))) вместо условных переходов кейсами вот вам жирный цветной текст") ))))