Продолжаем публиковать выдержки из бесплатного курса по разработке в Р7 офис
Что такое макросы?
Макросы — это набор инструкций или команд, которые выполняются автоматически. Они позволяют автоматизировать рутинные задачи и упростить работу с программами. В контексте редактора макросов в Табличном редакторе Р7-Офис, макросы предоставляют возможность автоматически выполнять повторяющиеся операции, такие как форматирование, вставка текста или изменение структуры документа.
Макросы — это так же небольшие скрипты, которые используются для облегчения повседневной работы с различными типами документов. Макросы Р7 используют синтаксис JavaScript и нотацию скриптов API Р7 Document Builder.
Есть несколько причин, по которым Р7 использует JavaScript для макросов:
-
платформонезависимость,
-
простота использования,
-
безопасность, поскольку макросы не имеют доступа к системе. Они просто выполняются в том же окне, что и редакторы.
Ознакомление с редактором макросов
Редактор макросов предоставляет инструменты для создания, редактирования и запуска макросов. В нем вы можете записывать действия, которые хотите автоматизировать, и сохранять их в виде макросов.
Теперь, когда мы разобрались, что такое макросы, давайте перейдем к их более подробному изучению и созданию собственных макросов!
Задачи, решаемые с помощью макросов
Рассмотрим структуру таблицы и попробуем разобраться, как работать с объектами таблицы через макросы.
Структура таблицы
Таблица в Табличном редакторе Р7-Офис состоит из следующих элементов:

-
Ячейки: Основные элементы таблицы, в которых можно размещать текст, числа, формулы и другие данные.
-
Строки и столбцы: Строки – это горизонтальные ряды ячеек, а столбцы – вертикальные группы ячеек.
-
Заголовки строк и столбцов: Можно задавать заголовки для строк и столбцов таблицы.
Создание простых макросов
Теперь, когда вы знаете, как работают макросы, попробуйте написать свой собственный макрос. У нас есть таблица, и нам нужно раскрасить альтернативные строки таблицы (нечетные будут зелеными, а четные — красными). В таблице 200 строк и столбцы от A до S. Сделать это вручную займет много времени. Поэтому использование макросов будет лучшим решением для этой проблемы.Откройте редакторы Р7 и создайте новую таблицу.
Откройте вкладку Плагины и выберите Макросы.

-
Появится окно макросов.
-
Нажмите Новый.
-
Вам будет предложен базовый оберточный функционал, в который можно ввести необходимый код:
(function() { // ... ваш код здесь ... })();
Давайте посмотрим в документации Builder.API, что нам нужно сделать для выполнения нашей задачи:
Пример 1
Сначала получим текущий рабочий лист с помощью метода GetActiveSheet:var oWorksheet = Api.GetActiveSheet();
Затем создадим цикл, который будет запускаться от первой до последней строки:for (var i = 1; i < 200; i += 2) {
}
Установим две переменные: одну для нечетных строк, вторую для четных строк:var rowOdd = i, rowEven = i + 1;
Раскрасим четные и нечетные строки в соответствующие цвета. Установим желаемые цвета, используя метод CreateColorFromRGB.
Получим диапазон ячеек с помощью метода GetRange и зададим цвет для нечетных строк:
oWorksheet.GetRange("A" + rowOdd + ":S" + rowOdd).SetFillColor(Api.CreateColorFromRGB(138, 181, 155));
То же самое для четных строк, но с другим цветом:
oWorksheet.GetRange("A" + rowEven + ":S" + rowEven).SetFillColor(Api.CreateColorFromRGB(216, 227, 220));
Соберем все вместе с полным кодом скрипта:
(function() { var oWorksheet = Api.GetActiveSheet(); for (var i = 1; i < 200; i += 2) { var rowOdd = i, rowEven = i + 1; oWorksheet.GetRange("A" + rowOdd + ":S" + rowOdd).SetFillColor(Api.CreateColorFromRGB(138, 181, 155)); oWorksheet.GetRange("A" + rowEven + ":S" + rowEven).SetFillColor(Api.CreateColorFromRGB(216, 227, 220)); } })();
Пример 2
Форматирование ячеек: Применение шрифтов, цветов и других параметров к ячейкам.
(function() { var oWorksheet = Api.GetActiveSheet(); for (var i = 1; i < 5; i += 2) { var rowOdd = i, rowEven = i + 1; oWorksheet.GetRange("A" + rowOdd + ":S" + rowOdd).SetFillColor(Api.CreateColorFromRGB(138, 181, 155)); oWorksheet.GetRange("A" + rowEven + ":S" + rowEven).SetFillColor(Api.CreateColorFromRGB(216, 227, 220)); oWorksheet.GetRange("A3").SetFontColor(Api.CreateColorFromRGB(0, 255, 0)); } })();
Отладка макросов в Р7
Для отладки макросов в Р7 выполните следующие шаги:
-
Откройте вкладку Плагины и нажмите Макросы.
-
Используйте команду отладчика ‘debugger;’ в своем скрипте:
debugger;
var oDocument = Api.GetDocument();
var oParagraph = oDocument.GetElement(0);
oParagraph.AddText("Hello world!");

Обратите внимание, что команда отладчика будет работать только если инструменты разработчика открыты. В противном случае браузер игнорирует её.
Команда debugger работает как точка останова и приостанавливает выполнение скрипта в точке, где эта команда вставлена.
Если вам нужно вывести определенные значения в консоль разработчика браузера, вы можете использовать метод console.log(). Передайте значение, которое вы хотите проверить, или строку сообщения в качестве аргумента этого метода и откройте консоль разработчика, нажав кнопку F12, чтобы увидеть результат:
console.log(123);
Подписка на событие
Для подписки на указанное событие и вызова функции обратного вызова при его наступлении используйте метод attachEvent.Например, чтобы подписаться на событие при клике на гиперссылку в документе, используйте следующие строки:
Api.attachEvent("asc_onHyperlinkClick", function(){
console.log("HYPERLINK!!!");
});
Когда вы нажмете на любую гиперссылку в документе, будет выполнено событие asc_onHyperlinkClick, и сообщение «HYPERLINK!!!» появится в консоли.
Привязка (назначение) макроса к объекту
В редакторе электронных таблиц вы можете назначить макрос графическому объекту:Щелкните правой кнопкой мыши по графическому объекту.

Создание сложных макросов
Изменение содержимого ячеек: Заполнение ячеек данными, вставка формул и текста.
Автоматическая настройка ширины столбцов и высоты строк.
(function() { const sheet = Api.GetActiveSheet(); // Получаем активный лист sheet.GetRange("A1").SetValue("111"); sheet.GetRange("B1").SetValue("222222222"); sheet.GetRange("A1:B1").AutoFit(false,true);//(ширина,высота) })();
Поиск и восстановление скрытых строк.
(function() { const rangeStr="A2:G10"; const sheet = Api.GetActiveSheet(); // Получаем активный лист const range=sheet.GetRange(rangeStr);//Получаем диапазон //Если диапазон приемлемый if(range!==undefined&&range){ //ПОлучаем адрес диапазона в формате R1C1:R2C2 (R-row C-collumn) const sAdress = sheet.GetRange(rangeStr).GetAddress(true, true, "xlR1C1", false); const diapArr=sAdress.split(":");//Разбиваем диапазон на начальный и конечный if(diapArr.length){ let rBegin=findRowNumber(diapArr[0]);//Ищем номер строки через встроенную функцию let rEnd=findRowNumber(diapArr[1]); //Если диапазоны строк определились верно if(rBegin>=0&&rEnd>=0){ //Проходим по строкам и проверяем на признак скрытости for(let i=1;i<=rEnd-rBegin;i++){ var row = range.GetRows(i); if(row!==undefined&&row){ if(row.GetHidden())//Если строка скрыта, то откроем её row.SetHidden(false); } } } } } })(); //Ищем номер строки в формате R1C1 function findRowNumber(strAdr){ let arrAdr=strAdr.split("C");//Ищем место, где начинается адрес столбца if(arrAdr.length){ return Number(arrAdr[0].substring(1,arrAdr[0].length)); } return -1; }
Макрос копирования данных между таблицами.
//Требуемый диапазон уже должен быть выбран на листе источнике! function copySelectedDataBetweenTables(nameSheet) { const sourceSheet = Api.GetActiveSheet(); // Получаем активный лист с исходными данными if(sourceSheet.GetName()!==nameSheet){ const targetSheet = Api.GetSheet(nameSheet); // Выделите нужный диапазон ячеек в исходной таблице const sourceRange = sourceSheet.GetSelection(); // // Вставьте данные в целевую таблицу if(sourceRange!==undefined&&sourceRange.GetCount()>0){ let nameRange=sourceRange.GetAddress(true, true, "xlA1", false); nameRange=nameRange.replace("$",""); sourceRange.Copy(targetSheet.GetRange(nameRange)); } } } copySelectedDataBetweenTables("Лист2"); // Вызываем функцию и указываем в аргументе имя листа куда мы копируем.
ссылка на оригинал статьи https://habr.com/ru/articles/836722/
Добавить комментарий