Cum să creați și să rulați o macrocomandă în LibreOffice Calc pe Linux

LibreOffice este răspunsul lumii FOSS la suita principală și proprietară Microsoft Office. Dezvoltat de cei mai importanți dezvoltatori de software Office Productivity și colaboratori, oferă un înlocuitor complet pentru Microsoft Office pe mai multe sisteme de operare.

Echivalentul aplicației LibreOffice al Microsoft Excel se numește LibreOffice Calc. Vine cu o serie de caracteristici și o interfață similară cu Excel. Are un motor Macro încorporat pentru a dezvolta și rula Macro-uri pentru automatizare. Cu toate acestea, nu acceptă Visual Basic, dar acceptă propriul limbaj; LibreOffice Basic, pentru programarea macrocomenzilor.

Suita LibreOffice vine preinstalată în majoritatea distribuțiilor Linux, inclusiv Ubuntu, Debian, Fedora și CentOS.

Crearea și rularea unei macrocomenzi în LibreOffice Calc

Mai întâi, să creăm o foaie de lucru cu câteva date eșantion.

Pentru a deschide organizatorul de macrocomenzi, accesați Instrumente » Macro-uri » Organizare macrocomenzi » Noțiuni de bază despre LibreOffice. Se va deschide Macro-uri de bază LibreOffice fereastră așa cum se arată în captura de ecran de mai jos.

Introduceți un nume nou pentru Macro, apoi faceți clic pe butonul Nou din partea dreaptă jos a ferestrei.

Acum ar trebui să vedeți ecranul Editor Macro în LibreOffice Basic.

După cum putem vedea, macrocomenzile create manual sunt create în mod implicit în „Macronurile mele și dialogurile -> Standard -> Modulul1”.

În prezent sunt prezente două macrocomenzi: Una este Principal, care este o macrocomandă goală implicită, iar altele este Test, macro-ul pe care l-am creat mai sus. Acum vom îmbunătăți macrocomanda de testare.

Macrocomanda noastră va îndeplini următoarele sarcini:

  • Verificați care toți oamenii au profesie de scriitor
  • Creați o foaie nouă
  • Mutați toate intrările pentru scriitori într-o foaie nouă

Mai jos este macrocomanda noastră:

Sub test rem Mutați intrările cu profesie Writer la noua foaie dim crs(8) ca obiect dim j ca Integer dim prof ca obiect dim i ca Integer dim sh ca obiect dim sh2 ca obiect sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 pentru i = 1 la 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Stocați rândul complet în variabilă If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Acum creați o foaie nouă și scrieți aceste date acolo 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 Loop End Sub

Permiteți-mi să vă explic macrocomanda de mai sus secțiune cu secțiune.

Subtest. . . End Sub

Test este numele macrocomenzii noastre, prin urmare, în cod, este notat ca Subtest (sub = subrutină). În mod similar, încheiem acest cod macro cu declarație End Sub. Rețineți că aceste instrucțiuni sunt adăugate automat atunci când creăm o macrocomandă din meniu, deși utilizatorul poate scrie direct codul macro aici și numele subrutinei va fi considerat drept nume macro.

rem 

Toate comentariile din LibreOffice Basic încep cu cuvântul cheie rem. O linie completă care începe cu rem este considerată comentariu. O altă modalitate este de a folosi ' (o singură virgulă inversată) la începutul rândului.

dim crs(8) ca obiect dim j ca Integer dim prof ca obiect dim i ca Integer dim sh ca obiect dim sh2 ca obiect

Aceasta este o declarație variabilă în LibreOffice Basic. Sintaxa generală este dim ca . Pentru a declara o matrice, utilizați o sintaxă similară cu variabila crs, unde 8 este lungimea matricei.

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

Această componentă se referă la documentul actual. În acest caz, este o foaie de lucru Calc. Încărcăm Sheet cu indicele 0, adică prima foaie, în variabilă sh. Există, de asemenea, funcții pentru a încărca o foaie folosind numele.

Apoi numim funcția getCellRangeByPosition a obiectului sh și încărcați-l în matricea crs. Intervalul de celule se referă la un grup de celule din foaie în funcție de poziție.

Rețineți că argumentele, 0, 0 (coloana 0, rândul 0) indică celula de pornire a intervalului și 3, 0 (coloana 3, rândul 0) indică celula finală a intervalului. Prin urmare 0, 0, 3, 0 se referă la primul rând (titlu) al foii noastre de probă.

pentru i = 1 la 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Stocați rândul complet în variabilă Dacă prof.string = "Writer" Atunci crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 End If next i

Folosim a pentru declarație pentru a parcurge rândurile. The pentru blocul se termină cu a Următorul instrucțiune, care incrementează variabila i la sfârșitul fiecărei iterații.

Apoi numim o functie GetCellByPosition de obiect sh. Trecem parametri (3, i), adică la fiecare iterație, obiectul celulei de pe coloana 3 și rândul i este preluat în variabila prof.

Apoi folosim un Dacă declarație pentru a verifica dacă valoarea din celula prof este „Writer”. Dacă este, numim din nou funcția getCellRangeByPosition, de data aceasta, cu i în locul numărului rândului de început și de sfârșit. Din nou îl stocăm în matrice crs.

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

Mai întâi creăm o foaie nouă cu nume Scriitori, la poziție 1, care este poziția a 2-a, deoarece indexul începe de la 0. Apoi obținem un obiect din această foaie nou creată, astfel încât să putem introduce datele scriitorilor în această foaie.

i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop

The Face în timp ce Instrucțiunea buclă este folosită atunci când dorim să facem bucla pe baza condițiilor, spre deosebire de bucla într-un interval de valori întregi, pentru care se utilizează pentru asa cum sa aratat mai devreme. Aici, facem buclă până la crs(i) nu este nulă.

Apoi, sunăm din nou getCellRangeByPosition într-un mod similar ca înainte pentru a obține un obiect de gamă în noua foaie.

În cele din urmă, numim două funcții: getDataArray care returnează datele de la crs(i), adică un rând de date (despre un scriitor) din prima foaie; și scriem aceste date în intervalul de celule într-o foaie nouă folosind setDataArray.

În cele din urmă, salvați macro-ul de la Fișier » Salvați tot opțiune.

Pentru a rula macrocomanda, accesați Instrumente » Macro-uri » Executare macrocomenzi și selectați Macro-ul din directorul „My Macros” din Biblioteca Macro Selector. Apasă pe Alerga butonul după selectarea unui nume de macrocomandă.

Rularea macrocomenzii de mai sus pe foaia noastră de calcul eșantion produce următorul rezultat.

Acesta este modul de a crea macrocomenzi în LibreOffice. Pentru mai multe informații și opțiuni, consultați documentația oficială.

? Noroc!