Come creare ed eseguire una macro in LibreOffice Calc su Linux

LibreOffice è la risposta del mondo FOSS alla suite Microsoft Office mainstream e proprietaria. Sviluppato dai principali sviluppatori e collaboratori di software per la produttività in ufficio, offre un sostituto completo per Microsoft Office su più sistemi operativi.

L'app LibreOffice equivalente a Microsoft Excel si chiama LibreOffice Calc. Viene fornito con una serie di funzionalità e un'interfaccia simile a Excel. Ha un motore Macro integrato per sviluppare ed eseguire Macro per l'automazione. Tuttavia, non supporta Visual Basic, ma supporta il proprio linguaggio; LibreOffice Basic, per la programmazione di macro.

La suite LibreOffice è preinstallata nella maggior parte delle distribuzioni Linux, tra cui Ubuntu, Debian, Fedora e CentOS.

Creazione ed esecuzione di una macro in LibreOffice Calc

Innanzitutto, creiamo un foglio di lavoro con alcuni dati di esempio.

Per aprire l'organizzatore Macro, vai a Strumenti » Macro » Organizza macro » Nozioni di base su LibreOffice. Si aprirà il Macro di base di LibreOffice finestra come mostrato nello screenshot qui sotto.

Immettere un nuovo nome per la Macro, quindi fare clic sul pulsante Nuovo nella parte inferiore destra della finestra.

Ora dovresti vedere la schermata dell'editor Macro in LibreOffice Basic.

Come possiamo vedere, le macro create manualmente vengono create per impostazione predefinita in "Le mie macro e finestre di dialogo -> Standard -> Modulo1".

Attualmente sono presenti due macro: una è Principale, che è una macro vuota predefinita e altro è test, la macro che abbiamo creato sopra. Ora miglioreremo la macro di prova.

La nostra macro svolgerà le seguenti attività:

  • Controlla quali tutte le persone hanno scrittore di professione
  • Crea un nuovo foglio
  • Sposta tutte le voci per gli autori in un nuovo foglio

Di seguito la nostra Macro:

Sub test rem Sposta le voci con profession Writer in un nuovo foglio dim crs(8) come oggetto dim j come Integer dim prof come oggetto dim i come Integer dim sh come oggetto dim sh2 come oggetto sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 per i = da 1 a 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Memorizza la riga completa nella variabile If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Ora crea un nuovo foglio e scrivi lì questi dati 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

Lascia che ti spieghi la macro di cui sopra sezione per sezione.

Sottoprova. . . Fine sotto

test è il nome della nostra macro, quindi nel codice è indicato come Sottotest (sub = sottoprogramma). Allo stesso modo terminiamo questo codice macro con istruzione Fine sotto. Nota che queste istruzioni vengono aggiunte automaticamente quando creiamo una macro dal menu, sebbene l'utente possa scrivere direttamente il codice della macro qui e il nome della subroutine sarà considerato come nome della macro.

rem 

Tutti i commenti in LibreOffice Basic iniziano con la parola chiave rem. Una riga completa che inizia con rem è considerata un commento. Un altro modo è usare ' (virgola singola) all'inizio della riga.

dim crs(8) come oggetto dim j come numero intero dim prof come oggetto dim i come numero intero dim sh come oggetto dim sh2 come oggetto

Questa è una dichiarazione di variabile in LibreOffice Basic. La sintassi generale è debole come . Per dichiarare un array, usa una sintassi simile alla variabile crs, dove 8 è la lunghezza dell'array.

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

Questo componente fa riferimento al documento corrente. In questo caso si tratta di un foglio di lavoro Calc. Carichiamo Foglio con indice 0, ovvero il primo foglio, nella variabile sh. Ci sono anche funzioni per caricare un foglio usando il nome.

Successivamente chiamiamo funzione getCellRangeByPosition dell'oggetto sh e caricarlo nell'array crs. L'intervallo di celle si riferisce a un gruppo di celle nel foglio in base alla posizione.

Si noti che gli argomenti, 0, 0 (colonna 0, riga 0) indicano la cella iniziale dell'intervallo e 3, 0 (colonna 3, riga 0) indicano la cella finale dell'intervallo. così 0, 0, 3, 0 si riferisce alla prima riga (intestazione) del nostro foglio campioni.

for i = da 1 a 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Memorizza la riga completa nella variabile If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 End If successivo i

Usiamo a per istruzione per scorrere le righe. Il per il blocco termina con a prossimo istruzione, che incrementa la variabile i alla fine di ogni iterazione.

Successivamente chiamiamo una funzione Ottieni cella per posizione di oggetto sh. Passiamo i parametri (3, io), cioè, ad ogni iterazione, l'oggetto della cella sulla colonna 3 e sulla riga i viene recuperato nella variabile prof.

Quindi usiamo an Se istruzione per verificare se il valore nella cella prof è "Writer". Se lo è, chiamiamo di nuovo la funzione getCellRangeByPosition, questa volta, con io al posto del numero di riga iniziale e finale. Di nuovo lo memorizziamo nell'array cris.

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

Per prima cosa creiamo un nuovo foglio con nome scrittori, in posizione 1, che è la 2a posizione, poiché l'indice inizia da 0. Quindi otteniamo un oggetto di questo foglio appena creato, in modo che possiamo inserire i dati degli scrittori in questo foglio.

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

Il Fare durante l'istruzione loop viene utilizzata quando si desidera eseguire il ciclo in base alle condizioni, anziché eseguire il ciclo in un intervallo di valori interi, per il quale utilizzare per come mostrato in precedenza. Qui, giriamo fino a cr(i) non è nullo.

Successivamente, chiamiamo di nuovo getCellRangeByPosition in modo simile a prima per ottenere un oggetto intervallo nel nuovo foglio.

Infine, chiamiamo due funzioni: getDataArray che restituisce i dati da cr(i), ovvero una riga di dati (su uno scrittore) dal primo foglio; e scriviamo questi dati nell'intervallo di celle in un nuovo foglio usando setDataArray.

Infine, salva la macro da File » Salva tutto opzione.

Per eseguire la macro, vai su Strumenti » Macro » Esegui macro e seleziona la tua Macro dalla directory "My Macros" nella libreria del selettore di macro. Clicca il Correre dopo aver selezionato un nome macro.

L'esecuzione della macro sopra sul nostro foglio di calcolo di esempio produce il seguente risultato.

Questo è il modo per creare macro in LibreOffice. Per ulteriori informazioni e opzioni, fare riferimento alla documentazione ufficiale.

? Saluti!

Categoria: App