Difference between revisions of "IT/Documentation/OOo3 User Guides/Getting Started/Creating a macro"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Creazione di una macro)
 
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
Creazione di una macro
+
{{DISPLAYTITLE:Creazione di una macro}}
 
+
{{Documentation/GS3MacroITTOC
 +
|ShowPrevNext=block
 +
|PrevPage=IT/Documentation/OOo3 User Guides/Getting Started/Creating a simple macro
 +
|NextPage=IT/Documentation/OOo3 User Guides/Getting Started/Sometimes the macro recorder fails
 +
}}__NOTOC__
 
Di solito mi faccio due domande, prima di registrare una macro:
 
Di solito mi faccio due domande, prima di registrare una macro:
  
# Il compito può essere eseguito come un semplice insieme di comandi?
+
# Il compito può essere eseguito come un semplice insieme di comandi che non cambiano?
 
# Posso organizzare i passaggi in maniera tale che l'ultimo comando posizioni il cursore in modo da accettare direttamente il prossimo comando?
 
# Posso organizzare i passaggi in maniera tale che l'ultimo comando posizioni il cursore in modo da accettare direttamente il prossimo comando?
  
== Un esempio complesso ==
+
==Un esempio complesso==
Di solito copio righe e colonne di dati da un sito web e li formatto in una tabella, in un documento di testo. Prima di tutto, copio la tabella dal sito web negli appunti. Per evitare di copiare anche la formattazione e il tipo di carattere, incollo il testo in un documento Writer come testo non formattato. Riformatto il testo con l'utilizzo delle tabulazioni, per utilizzare '''Tabella > Converti > Testo in tabella''' per convertirlo in una tabella.
+
Di solito copio righe e colonne di dati da un sito web e li formatto in una tabella, in un documento di testo. Prima di tutto, copio la tabella dal sito web negli appunti. Per evitare di copiare anche la formattazione e il tipo di carattere, incollo il testo in un documento Writer come testo non formattato. Riformatto il testo con l'utilizzo delle tabulazioni tra le colonne, così posso utilizzare '''Tabella > Converti > Testo in tabella''' per convertirlo in una tabella.
  
 
Analizzo il testo, per vedere se posso registrare una macro che formatti il testo (ricordando le due domande che mi sono posto). Come esempio, ho copiato il gruppo di costanti FontWeight dal sito web OpenOffice.org. La prima colonna indica il nome delle costanti. Ogni nome è seguito da uno spazio e una tabulazione.
 
Analizzo il testo, per vedere se posso registrare una macro che formatti il testo (ricordando le due domande che mi sono posto). Come esempio, ho copiato il gruppo di costanti FontWeight dal sito web OpenOffice.org. La prima colonna indica il nome delle costanti. Ogni nome è seguito da uno spazio e una tabulazione.
  
<center><center>DONTKNOW Il peso della costante non viene specificato.</center>
+
{| border="0" cellpadding="0"
 
+
|-
<center>THIN Identifica una dimensione del font del 50% .</center>
+
| DONTKNOW||La dimensione del carattere non viene specificata.
 
+
|-
<center>ULTRALIGHT Identifica una dimensione del carattere del 60% .</center>
+
| THIN||Identifica una dimensione del font del 50%.
 
+
|-
<center>LIGHT Indica una dimensione del carattere del 75%.</center>
+
| ULTRALIGHT&nbsp;&nbsp;&nbsp;||Identifica una dimensione del carattere del 60%.
 
+
|-
<center>SEMILIGHT Identifica una dimensione del carattere del 90% .</center>
+
| LIGHT||Indica una dimensione del carattere del 75%.
 
+
|-
<center>NORMAL Identifica una dimensione standard del carattere.</center>
+
| SEMILIGHT||Identifica una dimensione del carattere del 90%.
 
+
|-
<center>SEMIBOLD Identifica una dimensione del carattere del 110% .</center>
+
| NORMAL||Identifica una dimensione standard del carattere.
 
+
|-
<center>BOLD Identifica una dimensione del carattere del 150% .</center>
+
| SEMIBOLD||Identifica una dimensione del carattere del 110%.
 
+
|-
<center>ULTRABOLD Identifica una dimensione del carattere del 175% .</center>
+
| BOLD||Identifica una dimensione del carattere del 150%.
 
+
|-
<center>BLACK Identifica una dimensione del carattere del 200% .</center></center>
+
| ULTRABOLD||Identifica una dimensione del carattere del 175%.
 +
|-
 +
| BLACK||Identifica una dimensione del carattere del 200%.
 +
|-
 +
|}
  
 
Voglio che la prima colonna contenga il valore numerico, la seconda colonna il nome, e la terza la descrizione. Il lavoro è facilmente eseguibile per ogni riga, eccetto per DONTKNOW e NORMAL, che non contengono un valore numerico, ma so che i valori sono rispettivamente 0 e 100, quindi posso inserirli manualmente.
 
Voglio che la prima colonna contenga il valore numerico, la seconda colonna il nome, e la terza la descrizione. Il lavoro è facilmente eseguibile per ogni riga, eccetto per DONTKNOW e NORMAL, che non contengono un valore numerico, ma so che i valori sono rispettivamente 0 e 100, quindi posso inserirli manualmente.
  
I dati possono essere ripuliti in molti modi—tutti semplici. Il primo esempio utilizza la pressione di opportuni tasti presumendo che il cursore si trovi all'inizio della riga con il testo THIN.
+
I dati possono essere ripuliti in molti modi — tutti semplici. Il primo esempio utilizza la pressione di opportuni tasti presumendo che il cursore si trovi all'inizio della riga con il testo THIN.
  
 
# Fate clic su '''Strumenti > Macro > Registra Macro''' per cominciare la registrazione di una macro.
 
# Fate clic su '''Strumenti > Macro > Registra Macro''' per cominciare la registrazione di una macro.
Line 47: Line 55:
 
# Premete ''Home'' Per muovere il cursore all'inizio della riga.
 
# Premete ''Home'' Per muovere il cursore all'inizio della riga.
 
# Premete ''Ctrl+V'' per incollare il numero selezionato all'inizio della riga.
 
# Premete ''Ctrl+V'' per incollare il numero selezionato all'inizio della riga.
# Quando incollate il valore, verrà incollato anche uno spazio extra, quindi premete ''Backspace'' per rimuovere lo spazio che avanza.
+
# Quando incollate il valore, verrà incollato anche uno spazio extra, quindi premete ''Backspace'' per rimuovere lo spazio in più.
 
# Premete ''Tab'' per inserire una tabulazione fra il numero e il nome.
 
# Premete ''Tab'' per inserire una tabulazione fra il numero e il nome.
 
# Premete ''Home'' per muovervi all'inizio della riga.
 
# Premete ''Home'' per muovervi all'inizio della riga.
Line 53: Line 61:
 
# Fermate la registrazione e salvate la macro.
 
# Fermate la registrazione e salvate la macro.
  
Ci vuole molto più tempo per leggere i passi da eseguire che per eseguire la macro. Lavorate con calma e pensate ai passi e a come li fareste voi. Con la pratica verrà tutto più naturale.
+
Ci vuole molto più tempo per leggere e scrivere i passi da eseguire che per eseguire la macro. Lavorate con calma e pensate ai passi e a come li fareste voi. Con la pratica verrà tutto più naturale.
  
 
La macro generata è stata modificata per contenere il numero del passo nei commenti, per vedere la corrispondenza con le azioni descritte sopra.
 
La macro generata è stata modificata per contenere il numero del passo nei commenti, per vedere la corrispondenza con le azioni descritte sopra.
  
''Listato 1: Copia del valore numerico all'inizio della colonna.''
+
''Listato 2: Copia del valore numerico all'inizio della colonna.''
  
 +
<code>
 +
  sub CopyNumToCol1
 +
  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 (2) Premete Ctrl+Freccia destra per muovere il cursore all'inizio di "specifies".
 +
  dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
 +
 
 +
  rem (3) Premete Backspace due volte per rimuovere lo spazio e la tabulazione.
 +
  dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 +
 
 +
  rem ----------------------------------------------------------------------
 +
  dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 +
 
 +
  rem (4) Premete Tab per aggiungere una tabulazione senza lo spazio dopo il nome della costante.
 +
  dim args4(0) as new com.sun.star.beans.PropertyValue
 +
  args4(0).Name = "Text"
 +
  args4(0).Value = CHR$(9)
 +
 
 +
  dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())
 +
 
 +
  rem (5) Premete Canc per cancellare la s minuscola....
 +
  dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
 +
 
 +
  rem (5) ... e dopo premete S per aggiungere una S maiuscola.
 +
  dim args6(0) as new com.sun.star.beans.PropertyValue
 +
  args6(0).Name = "Text"
 +
  args6(0).Value = "S"
 +
 
 +
  dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())
 +
 
 +
  rem (6) Premete Ctrl+Freccia destra due volte per muovere il cursore all'inizio del numero.
 +
  dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
 +
 
 +
  rem ----------------------------------------------------------------------
 +
  dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
 +
 
 +
  rem (7) Premete Ctrl+Shift+Freccia destra per selezionare il numero.
 +
  dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
 +
 
 +
  rem (8) Premete Ctrl+C per copiare il testo selezionato negli appunti.
 +
  dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
 +
 
 +
  rem (9) Premete Fine per muovere il cursore alla fine della riga.
 +
  dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
 +
 
 +
  rem (10) Premete Backspace due volte per rimuovere gli spazi rimanenti.
 +
  dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 +
 
 +
  rem ----------------------------------------------------------------------
 +
  dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 +
 
 +
  rem (11) Premete Home per muovere il cursore all'inizio della riga.
 +
  dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
 +
 
 +
  rem (12) Premete Ctrl+V per incollare il numero selezionato all'inizio della riga.
 +
  dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
 +
 
 +
  rem (13) Premete Backspace per rimuovere lo spazio rimasto.
 +
  dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 +
 
 +
  rem (14) Premete Tab per inserire una tabulazione fra il numero ed il nome.
 +
  dim args17(0) as new com.sun.star.beans.PropertyValue
 +
  args17(0).Name = "Text"
 +
  args17(0).Value = CHR$(9)
 +
 
 +
  dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17())
 +
 
 +
  rem (15) Premete Home per andare all'inizio della riga.
 +
  dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
 +
 
 +
  rem (16) Premete Freccia giù per muovere il cursore alla riga successiva.
 +
  dim args19(1) as new com.sun.star.beans.PropertyValue
 +
  args19(0).Name = "Count"
 +
  args19(0).Value = 1
 +
  args19(1).Name = "Select"
 +
  args19(1).Value = false
 +
 
 +
  dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19())
 +
  end sub
 +
</code>
  
sub CopyNumToCol1
+
I movimenti del cursore vengono utilizzati per tutte le operazioni (al contrario di quanto accade nella ricerca). Se eseguite la macro nella riga contenente DONTKNOW, la parola ''weight'' viene spostata davanti alla riga e il primo “The” viene cambiato in “She”. In questo caso la macro non funziona bene, ma non dovrei eseguire la macro nelle righe che non hanno il formato appropriato: bisogna elaborarle manualmente.
rem -------------------------------------------------------------
+
rem definizione variabili
+
dim document  as object
+
dim dispatcher as object
+
rem -------------------------------------------------------------
+
rem accesso al documento
+
document  <nowiki>=</nowiki> ThisComponent.CurrentController.Frame
+
dispatcher <nowiki>=</nowiki> createUnoService("com.sun.star.frame.DispatchHelper")
+
  
rem (2) Premete ''Ctrl+Freccia destra'' per muovere il cursore all'inizio di “specifies”.
+
==Esecuzione rapida di una macro==
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
+
È tedioso eseguire ripetutamente una macro facendo sempre clic su '''Strumenti > Macro > Esegui Macro'''. Potete eseguire la macro dall'interno dell'IDE. Fate clic su '''Strumenti > Macro > Organizza Macro > OpenOffice.org Basic''' per aprire la finestra di dialogo Macro OpenOffice.org Basic. Selezionate la vostra macro e fate clic su '''Modifica''' per aprire la macro nell'IDE.
  
rem (3) Premete ''Backspace'' due volte per rimuovere lo spazio e la tabulazione.
+
L'IDE contiene un'icona '''Esegui Programma Basic''' nella barra degli strumenti, che esegue la prima macro presente nell'IDE. Fino a quando non la cambiate, la prima macro è quella vuota denominata Main. Modificate Main in maniera tale che appaia come mostrato nel Listato 3.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
+
  
rem -------------------------------------------------------------
+
''Listato 3: Modifica di Main per invocare CopiaNumAllaCol1.''
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
+
  
rem (4) Premete ''Tab'' per aggiungere una tabulazione senza lo spazio dopo il nome della costante.
+
<code>
dim args4(0) as new com.sun.star.beans.PropertyValue
+
  Sub Main
args4(0).Name <nowiki>=</nowiki> "Text"
+
    CopiaNumAllaCol1
args4(0).Value <nowiki>=</nowiki> CHR$(9)
+
  End Sub
 +
</code>
  
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())
 
  
rem (5) Premete ''Canc'' per cancellare la s minuscola....
+
Adesso, potete eseguire CopiaNumAllaCol1 facendo clic ripetutamente sull'icona '''Esegui Programma Basic''' nella barra degli strumenti dell'IDE. Questo metodo è semplice e rapido, specialmente per macro temporanee che vengono utilizzate solo poche volte e poi cancellate.
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
+
  
rem (5) ... e dopo premete ''S'' per aggiungere una S maiuscola.
 
dim args6(0) as new com.sun.star.beans.PropertyValue
 
args6(0).Name <nowiki>=</nowiki> "Text"
 
args6(0).Value <nowiki>=</nowiki> "S"
 
  
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())
+
{{Manual}}
 
+
[[Category:Getting Started (Documentation)]]
rem (6) Premete ''Ctrl+Freccia destra'' due volte per muovere il cursore all'inizio del numero.
+
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
+
 
+
rem -------------------------------------------------------------
+
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
+
 
+
rem (7) Premete ''Ctrl+Shift+Freccia destra'' per selezionare il numero.
+
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
+
 
+
rem (8) Premete ''Ctrl+C'' per copiare il testo selezionato negli appunti.
+
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
+
 
+
rem (9) Premete ''Fine'' per muovere il cursore alla fine della riga.
+
dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
+
 
+
rem (10) Premete ''Backspace'' due volte per rimuovere gli spazi rimanenti.
+
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
+
 
+
rem -------------------------------------------------------------
+
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
+
 
+
rem (11) Premete ''Home'' per muovere il cursore all'inizio della riga.
+
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
+
 
+
rem (12) Premete ''Ctrl+V'' per incollare il numero selezionato all'inizio della riga.
+
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
+
 
+
rem (13) Premete ''Backspace'' per rimuovere lo spazio rimasto.
+
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
+
 
+
rem (14) Premete ''Tab'' per inserire una tabulazione fra il numero ed il nome.
+
dim args17(0) as new com.sun.star.beans.PropertyValue
+
args17(0).Name <nowiki>=</nowiki> "Text"
+
args17(0).Value <nowiki>=</nowiki> CHR$(9)
+
 
+
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17())
+
 
+
rem (15) Premete ''Home'' per andare all'inizio della riga.
+
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
+
 
+
rem (16) Premete ''Freccia giù'' per muovere il cursore alla riga successiva.
+
dim args19(1) as new com.sun.star.beans.PropertyValue
+
args19(0).Name <nowiki>=</nowiki> "Count"
+
args19(0).Value <nowiki>=</nowiki> 1
+
args19(1).Name <nowiki>=</nowiki> "Select"
+
args19(1).Value <nowiki>=</nowiki> false
+
 
+
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19())
+
end sub
+
 
+
I movimenti del cursore vengono utilizzati per tutte le operazioni (al contrario di quanto accade nella ricerca). Se eseguite la macro nella riga contenente DONTKNOW, la parola ''weight'' viene spostata davanti alla riga e il primo “The” viene cambiato in “She”. In questo caso la macro non funziona bene, ma non dovrei eseguire la macro nelle righe che non hanno il formato appropriato: bisogna elaborarle manualmente.
+
 
+
== Esecuzione rapida di una macro ==
+
È tedioso eseguire ripetutamente una macro facendo sempre clic su '''Strumenti > Macro > Esegui Macro''' (vedere Errore: sorgente del riferimento non trovata). Potete eseguire la macro dall'interno dell'IDE. Fate clic su '''Strumenti > Macro > Organizza Macro > OpenOffice.org Basic''' per aprire la finestra di dialogo Macro OpenOffice.org Basic. Selezionate la vostra macro e fate clic su '''Modifica''' per aprire la macro nell'IDE.
+
 
+
L'IDE contiene un'icona '''Esegui Programma Basic''' nella barra degli strumenti, che esegue la prima macro presente nell'IDE. Fino a quando non la cambiate, la prima macro è quella vuota denominata Main. Modificate Main in maniera tale che appaia come mostrato nel Listato 2.
+
 
+
''Listato 2: Modifica di Main per invocare CopiaNumAllaCol1.''
+
 
+
Sub Main
+
  CopiaNumAllaCol1
+
End Sub
+
 
+
Adesso, potete eseguire CopiaNumAllaCol1 facendo clic ripetutamente sull'icona '''Esegui Programma Basic''' nella barra degli strumenti dell'IDE. Questo metodo è semplice e rapido, specialmente per macro temporanee che vengono utilizzate solo poche volte e poi cancellate.
+

Latest revision as of 15:52, 26 July 2010



Di solito mi faccio due domande, prima di registrare una macro:

  1. Il compito può essere eseguito come un semplice insieme di comandi che non cambiano?
  2. Posso organizzare i passaggi in maniera tale che l'ultimo comando posizioni il cursore in modo da accettare direttamente il prossimo comando?

Un esempio complesso

Di solito copio righe e colonne di dati da un sito web e li formatto in una tabella, in un documento di testo. Prima di tutto, copio la tabella dal sito web negli appunti. Per evitare di copiare anche la formattazione e il tipo di carattere, incollo il testo in un documento Writer come testo non formattato. Riformatto il testo con l'utilizzo delle tabulazioni tra le colonne, così posso utilizzare Tabella > Converti > Testo in tabella per convertirlo in una tabella.

Analizzo il testo, per vedere se posso registrare una macro che formatti il testo (ricordando le due domande che mi sono posto). Come esempio, ho copiato il gruppo di costanti FontWeight dal sito web OpenOffice.org. La prima colonna indica il nome delle costanti. Ogni nome è seguito da uno spazio e una tabulazione.

DONTKNOW La dimensione del carattere non viene specificata.
THIN Identifica una dimensione del font del 50%.
ULTRALIGHT    Identifica una dimensione del carattere del 60%.
LIGHT Indica una dimensione del carattere del 75%.
SEMILIGHT Identifica una dimensione del carattere del 90%.
NORMAL Identifica una dimensione standard del carattere.
SEMIBOLD Identifica una dimensione del carattere del 110%.
BOLD Identifica una dimensione del carattere del 150%.
ULTRABOLD Identifica una dimensione del carattere del 175%.
BLACK Identifica una dimensione del carattere del 200%.

Voglio che la prima colonna contenga il valore numerico, la seconda colonna il nome, e la terza la descrizione. Il lavoro è facilmente eseguibile per ogni riga, eccetto per DONTKNOW e NORMAL, che non contengono un valore numerico, ma so che i valori sono rispettivamente 0 e 100, quindi posso inserirli manualmente.

I dati possono essere ripuliti in molti modi — tutti semplici. Il primo esempio utilizza la pressione di opportuni tasti presumendo che il cursore si trovi all'inizio della riga con il testo THIN.

  1. Fate clic su Strumenti > Macro > Registra Macro per cominciare la registrazione di una macro.
  2. Premete Ctrl+Freccia destra per muovere il cursore all'inizio delle specifiche.
  3. Premete Backspace due volte per rimuovere lo spazio e la tabulazione.
  4. Premete Tab per aggiungere una tabulazione senza lo spazio dopo il nome della costante.
  5. Premete Canc per cancellare la s minuscola, e dopo premete S per aggiungere una S maiuscola.
  6. Premete Ctrl+Freccia destra due volte per muovere il cursore all'inizio del numero.
  7. Premete Ctrl+Maiusc+Freccia destra per selezionare e muovere il cursore prima del simbolo %.
  8. Premete Ctrl+C per copiare il testo selezionato negli appunti.
  9. Premete Fine per muovere il cursore alla fine della riga.
  10. Premete Backspace due volte per rimuovere gli spazi rimanenti.
  11. Premete Home Per muovere il cursore all'inizio della riga.
  12. Premete Ctrl+V per incollare il numero selezionato all'inizio della riga.
  13. Quando incollate il valore, verrà incollato anche uno spazio extra, quindi premete Backspace per rimuovere lo spazio in più.
  14. Premete Tab per inserire una tabulazione fra il numero e il nome.
  15. Premete Home per muovervi all'inizio della riga.
  16. Premete Freccia giù per muovere il cursore alla riga successiva.
  17. Fermate la registrazione e salvate la macro.

Ci vuole molto più tempo per leggere e scrivere i passi da eseguire che per eseguire la macro. Lavorate con calma e pensate ai passi e a come li fareste voi. Con la pratica verrà tutto più naturale.

La macro generata è stata modificata per contenere il numero del passo nei commenti, per vedere la corrispondenza con le azioni descritte sopra.

Listato 2: Copia del valore numerico all'inizio della colonna.

 sub CopyNumToCol1
 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 (2) Premete Ctrl+Freccia destra per muovere il cursore all'inizio di "specifies".
 dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
 
 rem (3) Premete Backspace due volte per rimuovere lo spazio e la tabulazione.
 dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 
 rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 
 rem (4) Premete Tab per aggiungere una tabulazione senza lo spazio dopo il nome della costante.
 dim args4(0) as new com.sun.star.beans.PropertyValue
 args4(0).Name = "Text"
 args4(0).Value = CHR$(9)
 
 dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())
 
 rem (5) Premete Canc per cancellare la s minuscola....
 dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
 
 rem (5) ... e dopo premete S per aggiungere una S maiuscola.
 dim args6(0) as new com.sun.star.beans.PropertyValue
 args6(0).Name = "Text"
 args6(0).Value = "S"
 
 dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())
 
 rem (6) Premete Ctrl+Freccia destra due volte per muovere il cursore all'inizio del numero.
 dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
 
 rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
 
 rem (7) Premete Ctrl+Shift+Freccia destra per selezionare il numero.
 dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
 
 rem (8) Premete Ctrl+C per copiare il testo selezionato negli appunti.
 dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
 
 rem (9) Premete Fine per muovere il cursore alla fine della riga.
 dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
 
 rem (10) Premete Backspace due volte per rimuovere gli spazi rimanenti.
 dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 
 rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 
 rem (11) Premete Home per muovere il cursore all'inizio della riga.
 dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
 
 rem (12) Premete Ctrl+V per incollare il numero selezionato all'inizio della riga.
 dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
 
 rem (13) Premete Backspace per rimuovere lo spazio rimasto.
 dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
 
 rem (14) Premete Tab per inserire una tabulazione fra il numero ed il nome.
 dim args17(0) as new com.sun.star.beans.PropertyValue
 args17(0).Name = "Text"
 args17(0).Value = CHR$(9)
 
 dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17())
 
 rem (15) Premete Home per andare all'inizio della riga.
 dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
 
 rem (16) Premete Freccia giù per muovere il cursore alla riga successiva.
 dim args19(1) as new com.sun.star.beans.PropertyValue
 args19(0).Name = "Count"
 args19(0).Value = 1
 args19(1).Name = "Select"
 args19(1).Value = false
 
 dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19())
 end sub

I movimenti del cursore vengono utilizzati per tutte le operazioni (al contrario di quanto accade nella ricerca). Se eseguite la macro nella riga contenente DONTKNOW, la parola weight viene spostata davanti alla riga e il primo “The” viene cambiato in “She”. In questo caso la macro non funziona bene, ma non dovrei eseguire la macro nelle righe che non hanno il formato appropriato: bisogna elaborarle manualmente.

Esecuzione rapida di una macro

È tedioso eseguire ripetutamente una macro facendo sempre clic su Strumenti > Macro > Esegui Macro. Potete eseguire la macro dall'interno dell'IDE. Fate clic su Strumenti > Macro > Organizza Macro > OpenOffice.org Basic per aprire la finestra di dialogo Macro OpenOffice.org Basic. Selezionate la vostra macro e fate clic su Modifica per aprire la macro nell'IDE.

L'IDE contiene un'icona Esegui Programma Basic nella barra degli strumenti, che esegue la prima macro presente nell'IDE. Fino a quando non la cambiate, la prima macro è quella vuota denominata Main. Modificate Main in maniera tale che appaia come mostrato nel Listato 3.

Listato 3: Modifica di Main per invocare CopiaNumAllaCol1.

 Sub Main
   CopiaNumAllaCol1
 End Sub


Adesso, potete eseguire CopiaNumAllaCol1 facendo clic ripetutamente sull'icona Esegui Programma Basic nella barra degli strumenti dell'IDE. Questo metodo è semplice e rapido, specialmente per macro temporanee che vengono utilizzate solo poche volte e poi cancellate.


Content on this page is licensed under the Creative Common Attribution 3.0 license (CC-BY).
Personal tools