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. Для отримання додаткової інформації та опцій зверніться до офіційної документації.
? Здоров'я!