Com crear i executar una macro a LibreOffice Calc a Linux

LibreOffice és la resposta del món FOSS a la suite principal i patentada de Microsoft Office. Desenvolupat pels principals desenvolupadors i col·laboradors de programari de productivitat d'Office, ofereix un reemplaçament complet de Microsoft Office en diversos sistemes operatius.

L'equivalent de l'aplicació LibreOffice de Microsoft Excel s'anomena LibreOffice Calc. Ve amb una sèrie de funcions i una interfície similar a Excel. Té un motor de macros integrat per desenvolupar i executar macros per a l'automatització. Tanmateix, no és compatible amb Visual Basic, però sí el seu propi llenguatge; LibreOffice Basic, per programar macros.

La suite LibreOffice ve preinstal·lada a la majoria de distribucions de Linux, incloses Ubuntu, Debian, Fedora i CentOS.

Creació i execució d'una macro al LibreOffice Calc

Primer, creem un full de treball amb algunes dades de mostra.

Per obrir l'organitzador de macros, aneu a Eines » Macros » Organitzar macros » Conceptes bàsics de LibreOffice. Obrirà el Macros bàsiques de LibreOffice finestra tal com es mostra a la captura de pantalla següent.

Introduïu un nom nou per a la macro i feu clic al botó Nou a la part inferior dreta de la finestra.

Ara hauríeu de veure la pantalla de l'editor de macros al LibreOffice Basic.

Com podem veure, les macros creades manualment es creen per defecte a "Les meves macros i diàlegs -> Estàndard -> Mòdul1".

Actualment hi ha dues macros presents: una és Principal, que és una macro buida predeterminada, i una altra prova, la macro que hem creat més amunt. Ara millorarem la macro de prova.

La nostra macro farà les tasques següents:

  • Comproveu quines persones tenen professió d'escriptor
  • Crea un full nou
  • Mou totes les entrades dels escriptors al full nou

A continuació es mostra la nostra macro:

Subtest rem Mou les entrades amb la professió Writer a un full nou dim crs(8) com a objecte dim j com a Integer dim prof com a objecte dim i com a Integer dim sh com a objecte dim sh2 com a objecte sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 per i = 1 a 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Emmagatzema la fila completa a la variable If prof.string = "Writer" Aleshores crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Ara creeu un nou full i escriviu-hi aquestes dades 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

Permeteu-me explicar-vos la macro anterior secció per secció.

Subprova. . . End Sub

prova és el nom de la nostra macro, per tant, al codi, es denota com Subprova (sub = subrutina). De la mateixa manera, acabem aquest codi macro amb una declaració End Sub. Tingueu en compte que aquestes declaracions s'afegeixen automàticament quan creem una macro des del menú, tot i que l'usuari pot escriure directament el codi de la macro aquí i el nom de la subrutina es considerarà com a nom de la macro.

rem 

Tots els comentaris del LibreOffice Basic comencen amb la paraula clau rem. Una línia completa que comença amb rem es considera comentari. Una altra manera és utilitzar ' (una coma invertida) a l'inici de la línia.

dim crs(8) com a objecte dim j com a Integer dim prof com a objecte dim i com a Integer dim sh com a objecte dim sh2 com a objecte

Aquesta és una declaració de variables al LibreOffice Basic. La sintaxi general és dim com . Per declarar una matriu, utilitzeu una sintaxi semblant a la variable crs, on 8 és la longitud de la matriu.

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

Aquest component fa referència al document actual. En aquest cas és un full de treball de Calc. Carreguem Full amb índex 0, és a dir, el primer full, en variable sh. També hi ha funcions per carregar un full amb el nom.

A continuació anomenem funció getCellRangeByPosition de l'objecte sh i carregar-lo a la matriu crs. L'interval de cel·les fa referència a un grup de cel·les del full en funció de la posició.

Tingueu en compte que els arguments, 0, 0 (columna 0, fila 0) denoten la cel·la inicial de l'interval i 3, 0 (columna 3, fila 0) denoten la cel·la final de l'interval. Així 0, 0, 3, 0 fa referència a la primera fila (encapçalament) del nostre full de mostra.

per i = 1 a 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Emmagatzema la fila completa a la variable Si prof.string = "Writer" Aleshores crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Final Si següent i

Fem servir a per declaració per recórrer les files. El per el bloc acaba amb a Pròxim sentència, que incrementa la variable i al final de cada iteració.

A continuació anomenem una funció GetCellByPosition d'objecte sh. Passem paràmetres (3, i), és a dir, amb cada iteració, l'objecte de la cel·la de la columna 3 i la fila i es recupera a la variable prof.

Després fem servir un Si declaració per comprovar si el valor de la cel·la prof és "Writer". Si és així, tornem a cridar la funció getCellRangeByPosition, aquesta vegada, amb i en lloc del número de fila inicial i final. De nou l'emmagatzemem a la matriu crs.

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

Primer creem un nou full amb el nom Escriptors, en posició 1, que és la 2a posició, ja que l'índex comença a 0. Aleshores obtenim un objecte d'aquest full de nova creació, de manera que podem introduir les dades dels escriptors en aquest full.

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

El Fer mentre La instrucció de bucle s'utilitza quan volem fer un bucle en funció de les condicions, a diferència del bucle en un rang de valors enters, per als quals s'utilitza per com es mostra anteriorment. Aquí, fem un bucle fins crs(i) no és nul·la.

A continuació, tornem a trucar getCellRangeByPosition de la mateixa manera que abans per obtenir un objecte d'interval al nou full.

Finalment, anomenem dues funcions: getDataArray que retorna les dades de crs(i), és a dir, una fila de dades (sobre un escriptor) del primer full; i escrivim aquestes dades a l'interval de cel·les en un full nou utilitzant setDataArray.

Finalment, deseu la macro de Fitxer » Desa-ho tot opció.

Per executar la macro, aneu a Eines » Macros » Executar macro i seleccioneu la vostra macro al directori "Les meves macros" a la biblioteca del selector de macros. Feu clic a Correr botó després de seleccionar un nom de macro.

L'execució de la macro anterior al nostre full de càlcul de mostra, produeix el resultat següent.

Aquesta és la manera de crear macros al LibreOffice. Per a més informació i opcions, consulteu la documentació oficial.

? Salut!