Как создать и запустить макрос в LibreOffice Calc в Linux

LibreOffice - это ответ мирового сообщества FOSS на распространенный и проприетарный пакет Microsoft Office Suite. Разработанный ведущими разработчиками и участниками программного обеспечения для повышения производительности Office, он предлагает полную замену Microsoft Office в нескольких операционных системах.

Приложение LibreOffice, эквивалентное Microsoft Excel, называется LibreOffice Calc. Он имеет ряд функций и интерфейс, аналогичный Excel. Он имеет встроенный механизм макросов для разработки и запуска макросов для автоматизации. Однако он не поддерживает Visual Basic, но поддерживает свой собственный язык; LibreOffice Basic для программирования макросов.

Пакет LibreOffice предустановлен в большинстве дистрибутивов Linux, включая Ubuntu, Debian, Fedora и CentOS.

Создание и запуск макроса в LibreOffice Calc

Во-первых, давайте создадим лист с примерами данных.

Чтобы открыть органайзер макросов, перейдите в Инструменты »Макросы» Упорядочить макросы »Основы LibreOffice. Это откроет Макросы LibreOffice Basic окно, как показано на скриншоте ниже.

Введите новое имя для макроса, затем нажмите кнопку «Новый» в правом нижнем углу окна.

Теперь вы должны увидеть экран редактора макросов в LibreOffice Basic.

Как мы видим, созданные вручную макросы по умолчанию создаются в разделе «Мои макросы и диалоги -> Стандартные -> Модуль1».

В настоящее время присутствуют два макроса: один - Главный, который является пустым макросом по умолчанию, а другой - контрольная работа, макрос, который мы создали выше. Теперь мы улучшим тестовый макрос.

Наш макрос будет выполнять следующие задачи:

  • Проверьте, у кого есть профессия писателя
  • Создать новый лист
  • Переместить все записи для писателей на новый лист

Ниже приводится наш макрос:

Подтест rem Переместить записи с профессией Writer на новый лист dim crs (8) как объект dim j как Integer dim prof как объект dim i как Integer dim sh как объект dim sh2 как объект sh = ThisComponent.Sheets (0) crs (0) = sh.getCellRangeByPosition (0, 0, 3, 0) j = 1 для i = от 1 до 5 x = 1 prof = sh.GetCellByPosition (3, i) rem Сохранить всю строку в переменной Если prof.string = "Writer" Тогда crs (j) = sh.getCellRangeByPosition (0, i, 3, i) j = j + 1 End If next i rem Теперь создайте новый лист и запишите туда эти данные ThisComponent.Sheets.insertNewByName ("Writers", 1) sh2 = ThisComponent.Sheets (1) i = 0 Делать, пока не IsNull (crs (i)) sh2range = sh2.getCellRangeByPosition (0, i, 3, i) sh2range.setDataArray (crs (i) .getDataArray) i = i + 1 Подчеркнутый конец петли

Позвольте мне объяснить вам этот макрос по частям.

Дополнительный тест. . . Конец подписки

контрольная работа - это имя нашего макроса, поэтому в коде оно обозначается как Дополнительный тест (sub = подпрограмма). Точно так же мы заканчиваем этот макрокод оператором Конец подписки. Обратите внимание, что эти операторы автоматически добавляются, когда мы создаем макрос из меню, хотя пользователь может напрямую написать здесь код макроса, и имя подпрограммы будет рассматриваться как имя макроса.

rem 

Все комментарии в LibreOffice Basic начинаются с ключевого слова rem. Полная строка, начинающаяся с rem, считается комментарием. Другой способ - использовать ' (одиночная кавычка) в начале строки.

dim crs (8) as object dim j as Integer dim prof as object dim i as Integer dim sh as object dim sh2 as object

Это объявление переменной в LibreOffice Basic. Общий синтаксис: тусклый, как . Чтобы объявить массив, используйте синтаксис, аналогичный переменной crs, где 8 - длина массива.

sh = ThisComponent.Sheets (0) crs (0) = sh.getCellRangeByPosition (0, 0, 3, 0) j = 1

ThisComponent относится к текущему документу. В данном случае это рабочий лист Calc. Загружаем Sheet с индексом 0, т.е. первый лист, в переменную sh. Также есть функции для загрузки листа по имени.

Далее мы вызываем функцию getCellRangeByPosition объекта sh и загрузите его в массив crs. Диапазон ячеек относится к группе ячеек на листе в зависимости от положения.

Обратите внимание, что аргументы, 0, 0 (столбец 0, строка 0) обозначают начальную ячейку диапазона, а 3, 0 (столбец 3, строка 0) обозначают конечную ячейку диапазона. Таким образом 0, 0, 3, 0 относится к первой (заголовочной) строке нашего образца.

для i = от 1 до 5 x = 1 prof = sh.GetCellByPosition (3, i) rem Сохранить всю строку в переменной Если prof.string = "Writer" Тогда crs (j) = sh.getCellRangeByPosition (0, i, 3, i ) j = j + 1 End Если следующий i

Мы используем за оператор для перебора строк. В за блок заканчивается следующий оператор, который увеличивает переменную i в конце каждой итерации.

Далее мы вызываем функцию GetCellByPosition объекта ш. Передаем параметры (3, я), т.е. на каждой итерации объект ячейки в столбце 3 и строке i извлекается в переменной prof.

Затем мы используем Если оператор, чтобы проверить, является ли значение в ячейке prof «Writer». Если это так, мы снова вызываем функцию getCellRangeByPositionна этот раз с я вместо номера начала и конца строки. Снова сохраняем его в массиве crs.

ThisComponent.Sheets.insertNewByName ("Писатели", 1) sh2 = ThisComponent.Sheets (1)

Сначала мы создаем новый лист с именем Писатели, в позиции 1, которая является второй позицией, поскольку индекс начинается с 0. Затем мы получаем объект этого вновь созданного листа, так что мы можем ввести данные писателей в этот лист.

i = 0 Делать, пока не IsNull (crs (i)) sh2range = sh2.getCellRangeByPosition (0, i, 3, i) sh2range.setDataArray (crs (i) .getDataArray) i = i + 1 Loop

В Делать пока Оператор цикла используется, когда мы хотим выполнить цикл на основе условий, в отличие от цикла в диапазоне целочисленных значений, для которых используется использование за как показано ранее. Здесь мы зацикливаемся до crs (я) не равно нулю.

Далее мы снова вызываем getCellRangeByPosition таким же образом, как и раньше, чтобы получить объект диапазона на новом листе.

Наконец, мы вызываем две функции: getDataArray который возвращает данные из crs (я), т.е. одна строка данных (о писателе) с первого листа; и мы записываем эти данные в диапазон ячеек на новом листе, используя setDataArray.

Наконец, сохраните макрос из Файл »Сохранить все вариант.

Чтобы запустить макрос, перейдите в Инструменты »Макросы» Запустить макрос и выберите свой макрос из каталога «Мои макросы» в библиотеке выбора макросов. Щелкните значок Бегать после выбора имени макроса.

Выполнение вышеуказанного макроса в нашем примере электронной таблицы дает следующий результат.

Это способ создания макросов в LibreOffice. Для получения дополнительной информации и опций обратитесь к официальной документации.

? Ваше здоровье!