Как да създадете и стартирате макрос в LibreOffice Calc на Linux

LibreOffice е отговорът на FOSS света на масовия и собствен пакет Microsoft Office. Разработен от водещи разработчици и сътрудници на софтуер за Office Productivity, той предлага пълна замяна на Microsoft Office на множество операционни системи.

Еквивалентът на приложението LibreOffice на Microsoft Excel се нарича LibreOffice Calc. Той идва с редица функции и интерфейс, подобен на Excel. Той има вграден Macro engine за разработване и стартиране на макроси за автоматизация. Въпреки това, той не поддържа Visual Basic, но поддържа собствен език; LibreOffice Basic, за програмиране на макроси.

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

Създаване и стартиране на макрос в LibreOffice Calc

Първо, нека създадем работен лист с някои примерни данни.

За да отворите организатора на макроси, отидете на Инструменти » Макроси » Организиране на макроси » Основи на LibreOffice. Ще отвори Основни макроси на LibreOffice прозорец, както е показано на екранната снимка по-долу.

Въведете ново име за макроса, след което щракнете върху бутона Нов в долната дясна част на прозореца.

Сега трябва да видите екрана на редактора на макроси в LibreOffice Basic.

Както виждаме, ръчно създадените макроси по подразбиране се създават под „Моите макроси и диалози -> Стандартни -> Модул1”.

В момента има два макроса: Единият е Основен, което е празен макрос по подразбиране, а другият е тест, макросът, който създадохме по-горе. Сега ще подобрим тестовия макрос.

Нашият макрос ще изпълнява следните задачи:

  • Проверете кои всички хора имат професия писател
  • Създайте нов лист
  • Преместете всички записи за писатели в нов лист

Следва нашия макрос:

Подтест rem Преместване на записи с професия Writer в нов лист dim crs(8) като обект dim j като цяло число dim prof като обект dim i като цяло число 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 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Подп. край на цикъла

Позволете ми да ви обясня горния макрос раздел по раздел.

Подтест. . . Край под

тест е името на нашия макрос, следователно в кода е обозначен като Подтест (под = подпрограма). По същия начин завършваме този макрокод с оператор Край под. Имайте предвид, че тези изрази се добавят автоматично, когато създадем макрос от менюто, въпреки че потребителят може директно да напише кода на макроса тук и името на подпрограмата ще се счита за име на макрос.

рем 

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

dim crs(8) като обект dim j като цяло число dim prof като обект dim i като цяло число 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 за изявление, за да премине през редовете. В за блок завършва с a следващия оператор, който увеличава променливата i в края на всяка итерация.

След това извикваме функция GetCellByPosition на обект sh. Предаваме параметри (3, и)т.е. с всяка итерация обектът на клетка на колона 3 и ред i се извлича в променлива prof.

След това използваме an Ако изявление за проверка дали стойността в клетка prof е „Writer“. Ако е така, отново извикваме функцията getCellRangeByPosition, този път, с и на мястото на номера на началния и крайния ред. Отново го съхраняваме в масива кр.

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

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

i = 0 Do Докато не е IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 цикъл

В Правете Докато loop оператор се използва, когато искаме да направим цикъл въз основа на условия, за разлика от цикъла в диапазон от цели числа, за които използвайте за както е показано по-рано. Ето, ние зацикляме до crs(i) не е нула.

След това отново се обаждаме getCellRangeByPosition по подобен начин както преди, за да получите обект на диапазон в новия лист.

И накрая, ние извикаме две функции: getDataArray който връща данните от crs(i), т.е. един ред данни (за писател) от първия лист; и ние записваме тези данни в диапазона от клетки в нов лист с помощта на setDataArray.

Накрая запазете макроса от Файл » Запазване на всички опция.

За да стартирате макроса, отидете на Инструменти » Макроси » Стартиране на макрос и изберете вашия макрос от директорията „Моите макроси“ в библиотеката за избор на макроси. Щракнете върху Бягай бутон, след като изберете име на макрос.

Изпълнението на горния макрос в нашата примерна електронна таблица дава следния резултат.

Това е начинът за създаване на макроси в LibreOffice. За повече информация и опции вижте официалната документация.

? Наздраве!