Як створити та запустити макрос у LibreOffice Calc на Linux

LibreOffice — це світова відповідь FOSS на основний і запатентований пакет Microsoft Office. Розроблений провідними розробниками та учасниками програмного забезпечення Office Productivity, він пропонує повну заміну Microsoft Office у кількох операційних системах.

Програма LibreOffice, еквівалент Microsoft Excel, називається LibreOffice Calc. Він має ряд функцій і інтерфейс, подібний до Excel. Він має вбудований механізм макросів для розробки та запуску макросів для автоматизації. Однак він не підтримує Visual Basic, але підтримує власну мову; LibreOffice Basic, для програмування макросів.

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

Створення та запуск макросу в LibreOffice Calc

Спочатку створимо робочий аркуш із деякими зразками даних.

Щоб відкрити органайзер макросів, перейдіть до Інструменти » Макроси » Упорядкувати макроси » Основи LibreOffice. Це відкриє Основні макроси LibreOffice вікно, як показано на скріншоті нижче.

Введіть нову назву для макросу, а потім натисніть кнопку Створити в нижньому правому куті вікна.

Тепер ви повинні побачити екран редактора макросів у 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

Дозвольте пояснити наведений вище макрос розділ за розділом.

Підтест. . . Кінець суб

випробування це назва нашого макросу, тому в коді він позначається як Підтест (суб = підпрограма). Аналогічно ми закінчуємо цей код макросу оператором Кінець суб. Зауважте, що ці оператори автоматично додаються, коли ми створюємо макрос із меню, хоча користувач може безпосередньо вписати код макросу тут, а ім’я підпрограми буде розглядатися як ім’я макросу.

рем 

Усі коментарі в LibreOffice Basic починаються з ключового слова рем. Повний рядок, що починається з rem, вважається коментарем. Інший спосіб – використання ' (одна обернена кома) на початку рядка.

dim crs(8) як об'єкт dim j як Integer dim prof як об'єкт dim i як Integer dim sh як об'єкт dim sh2 як об'єкт

Це оголошення змінної в LibreOffice Basic. Загальний синтаксис такий тьмяний як . Щоб оголосити масив, використовуйте синтаксис, подібний до змінної crs, де 8 — довжина масиву.

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

Цей компонент посилається на поточний документ. У цьому випадку це робочий лист 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 Кінець Якщо наступне i

Ми використовуємо a для оператор для циклу по рядках. The для блок закінчується на а наступний оператор, який збільшує змінну i в кінці кожної ітерації.

Далі ми викликаємо функцію GetCellByPosition об'єкта ш. Передаємо параметри (3, i), тобто з кожною ітерацією об’єкт комірки в стовпці 3 та рядку i витягується у змінній prof.

Тоді ми використовуємо an Якщо оператор, щоб перевірити, чи значення в клітинці prof є «Writer». Якщо це так, ми знову викликаємо функцію getCellRangeByPosition, цього разу, с я замість номера початкового та кінцевого рядка. Знову зберігаємо його в масиві кр.

ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)

Спочатку створюємо новий аркуш з назвою Письменники, на посаді 1, що є 2-ю позицією, оскільки індекс починається з 0. Потім ми отримуємо об'єкт цього новоствореного аркуша, щоб ми могли ввести дані авторів на цьому аркуші.

i = 0 Робити, поки не IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 цикл

The Робіть поки Оператор циклу використовується, коли ми хочемо виконати цикл на основі умов, на відміну від циклу в діапазоні цілих значень, для чого використовують для як показано раніше. Тут ми зациклюємо до crs(i) не є нульовим.

Далі ми знову дзвонимо getCellRangeByPosition подібним чином, як і раніше, щоб отримати об’єкт діапазону на новому аркуші.

Нарешті, ми викликаємо дві функції: getDataArray який повертає дані з crs(i), тобто один рядок даних (про письменника) з першого аркуша; і ми записуємо ці дані в діапазон комірок на новому аркуші за допомогою setDataArray.

Нарешті, збережіть макрос з Файл » Зберегти все варіант.

Щоб запустити макрос, перейдіть до Інструменти » Макроси » Запустити макрос і виберіть свій макрос у каталозі «Мої макроси» в бібліотеці вибору макросів. Натисніть кнопку Біжи після вибору назви макросу.

Виконання вищевказаного макросу в нашому зразку електронної таблиці дає наступний результат.

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

? Здоров'я!