IT/Documentation/OOo3 User Guides/Getting Started/Creating a simple macro

From Apache OpenOffice Wiki
< IT‎ | Documentation‎ | OOo3 User Guides‎ | Getting Started
Revision as of 16:14, 9 July 2010 by Scaligero (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Creazione di una semplice macro

Supponete di dover inserire ripetutamente sempre le stesse informazioni. Sebbene sia possibile memorizzare le informazioni negli appunti, se questi nel frattempo vengono utilizzati, il loro contenuto cambia. Una semplice soluzione consiste nel memorizzare i dati in una macro (in alcuni semplici casi, come l'esempio utilizzato in questa sede, una soluzione migliore consiste nell'utilizzo del completamento automatico).

  1. [[Image:]]Fate clic su Strumenti > Macro > Registra Macro per cominciare la registrazione di una macro.

Comparirà una piccola finestra, per far sapere che OpenOffice.org sta registrando.

  1. Digitate l'informazione desiderata, o eseguite la serie di operazioni desiderata. In questo caso, ho digitato il mio nome, Andrew Pitonyak.
  2. Fate clic sul pulsante Termina registrazione per interrompere la registrazione, salvate la macro, e visualizzate la finestra di dialogo Macro OpenOffice.org Basic (vedere Figura 1).
  3. Assicuratevi di selezionare la cartella di libreria denominata Macro personali. Cercate la libreria denominata Standard all'interno di Macro personali. Notate che tutte le cartelle di libreria hanno una libreria denominata Standard. Selezionate la libreria standard e fate clic su Nuovo modulo per creare un nuovo modulo che conterrà la macro.
[[Image:|thumb|<center>
Figura 1: Finestra di dialogo OOo Macro Organizer, con la libreria DBInspection selezionata]]</center>
  1. Il nome predefinito del modulo è Module1; scegliete un nome appropriato. Sebbene non sia ancora descrittivo, ho utilizzato il nome Registrato. Digitate un nome descrittivo e fate clic su OK per creare il modulo. Verrà visualizzata nuovamente la finestra di dialogo Macro Openoffice.org Basic, mostrando il nuovo modulo.
[[Image:|thumb|<center>
Figura 2: Dai al modulo un nome descrittivo]]</center>
  1. Selezionate il modulo appena creato. Nella casella di testo in alto a sinistra, digitate il nome della macro, come "InserisciMioNome", e dopo fate clic su Registra per salvare la macro.

Se avete eseguito tutti i passi correttamente, la libreria Standard adesso conterrà un modulo chiamato Registrato, che contiene la macro InserisciMioNome, come mostrato in Figura 3. Quando OOo crea un nuovo modulo, lo aggiunge automaticamente alla macro Main; come si può vedere in Figura 3.

Esecuzione di una macro

Fate clic su Strumenti > Macro > Esegui Macro per aprire la finestra di selezione della macro (guarda Figura 3). Selezionate la macro appena creata e fate clic su Esegui.

[[Image:|thumb|Figura 3: Selezionate la vostra macro e fate clic su Esegui]]

Ci sono altri metodi per eseguire una macro. Per esempio, potete fare clic su Strumenti > Macro > Organizza Macro > OpenOffice.org Basic per aprire la finestra di gestione delle macro , la quale contiene il pulsante Esegui come nel caso precedente. L'autore, uno scrittore avanzato di macro, preferisce il gestore di macro perché la finestra di dialogo di solito appare più velocemente, ma il processo di selezione può essere più lento.

Visualizzazione e modifica della macro

Potete visualizzare e modificare la macro che avete appena creato. Fate clic su Strumenti > Macro > Organizza Macro > OpenOffice.org Basic per aprire la finestra di dialogo Macro OpenOffice.org Basic Macro (vedere Figura 3). Selezionate la nuova macro e fate clic su Modifica per aprire la macro nell'IDE (Integrated Development Environment, Ambiente di Sviluppo Integrato) di Basic.

Listato 1: La macro “InserisciMioNome” creata.

REM  *****  BASIC  *****
Sub Main
End Sub
sub InserisciMioNome
rem -------------------------------------------------------------
rem definizione variabili
dim document   as object
dim dispatcher as object
rem -------------------------------------------------------------
rem accesso al documento
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Andrew Pitonyak"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub

La macro del Listato 1 è più semplice di come compare a prima vista. Per capire meglio la macro generata sono necessarie solo alcune nozioni. La spiegazione comincia con la descrizione degli elementi della macro che sono presenti all'inizio del listato. Se preferite saltare questi dettagli, allora basta cambiare il testo “Andrew Pitonyak” con quello che volete inserire nella posizione corrente del cursore all'interno del documento.

I commenti cominciano con REM

La parola chiave REM, abbreviazione di remark, si trova all'inizio della riga di commento. Tutto il testo che segue REM (nella stessa riga) viene ignorato. Si può utilizzare come scorciatoia anche il carattere di apice singolo ' per scrivere un commento.


Suggerimento
StarBasic non è sensibile alle maiuscole per le parole chiave, quindi REM, Rem, rem danno tutte inizio ad un commento. Se utilizzate le costanti simboliche definite dalle API, è buona norma supporre che i nomi siano sensibili alle maiuscole—le costanti simboliche sono un argomento avanzato che di solito può essere ignorato dagli utenti che utilizzano il registratore macro.

Definizione delle subroutine con SUB

Le singole macro sono memorizzate in subroutine tramite la parola chiave SUB. La fine di una subroutine è indicata dalle parole chiave END SUB. Il codice comincia dalla definizione di una subroutine denominata Main, che è vuota e non fa niente. La subroutine seguente, InserisciMioNome, contiene il codice generato.


Suggerimento
OpenOffice.org crea una subroutine vuota, denominata Main, quando si crea un modulo.

Questi sono argomenti avanzati che vanno al di là degli scopi di questo documento, ma la loro conoscenza potrebbe essere utile:

  • Potete scrivere una macro in maniera tale da poter passare dei valori alla subroutine. Questi valori sono chiamati argomenti. Le macro registrate non accettano argomenti.
  • Un altro tipo di subroutine è la funzione. Una funzione è una subroutine che restituisce un valore. Per definire una funzione si utilizza la parola chiave FUNCTION al posto di SUB. Le macro generate cominciano sempre con la parola chiave SUB.

Definizione delle variabili mediante l'utilizzo di DIM

Potete scrivere le informazioni sopra un foglio, per riutilizzarle in seguito. Una variabile, come un foglio, contiene informazioni che possono essere lette e modificate. Utilizzare il costrutto DIM è come preparare un foglio che verrà utilizzato per memorizzare dei messaggi o degli appunti.

La macro InserisciMioNome definisce le variabili document e dispatcher di tipo object. Altri tipi di variabili comunemente utilizzati sono string, integer, e date. Una terza variabile, denominata args1, è un vettore di valori. Una variabile di tipo array permette ad una singola variabile di contenere più valori, in maniera simile ad avere molte pagine per un solo libro. I valori in un vettore sono solitamente numerati a partire da zero. Il numero racchiuso dalle parentesi indica il numero più elevato utilizzabile per accedere ad una locazione di memoria. In questo esempio c'è solo un valore e il suo indice è zero.

Assemblare più macro

L'argomento seguente è molto dettagliato, non è necessario comprenderlo a fondo. La prima riga definisce l'inizio della macro.

sub InserisciMioNome

Qui vengono dichiarate due variabili:

dim document   as object
dim dispatcher as object

ThisComponent fa riferimento al documento corrente.

La proprietà CurrentController di un documento si riferisce al servizio che “controlla” il documento stesso. Per esempio, quando scrivete qualcosa, è questo il controller che viene attivato. Il controller corrente poi abilita i cambiamenti nella finestra del documento.

La proprietà Frame di un controller restituisce il contenitore principale del documento. Inoltre, la variabile denominata document fa riferimento alla contenitore del documento stesso, che riceve i comandi da eseguire.

document = ThisComponent.CurrentController.Frame

La maggior parte dei compiti in OpenOffice.org sono eseguiti dall'invocazione di un comando. La versione 2.0 di OOo introduce il servizio dispatch helper il quale esegue la maggior parte del lavoro necessario per utilizzare le esecuzioni delle macro. Il metodo CreateUnoService accetta come argomento il nome di un servizio, e cerca di crearne un'istanza. Per finire, la variabile dispatcher contiene un riferimento a DispatchHelper.

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Dichiarazione di un vettore di proprietà. Ogni proprietà ha un nome e un valore. In altre parole, è una coppia nome/valore. Il vettore creato ha una proprietà nella posizione zero.

dim args1(0) as new com.sun.star.beans.PropertyValue

Date alla proprietà il nome “Text” e create come valore “Andrew Pitonyak”, che è il testo che verrà inserito quando verrà eseguita la macro.

args1(0).Name = "Text"
args1(0).Value = "Andrew Pitonyak"

Qui è dove avviene la magia. Il dispatch helper manda una richiesta al contenitore del documento (memorizzato nella variabile denominata document) mediante l'utilizzo del comando .uno:InsertText. I due argomenti successivi, frame name e search flags, vanno al di là dello scopo di questo documento. L'ultimo argomento è il vettore di proprietà che verrà utilizzato durante l'esecuzione del comando InsertText.

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())

Finalmente, si arriva alla fine della subroutine.

end sub
Personal tools