Salve a tutti,
se volessi imparare a scrivere delle macro, dove mi consigliate di studiare per apprendere la sintassi di base? in passato ho programmato in vari linguaggi ma è passtao molto tempo e sto praticamente ricominciando da zero.
grazie.
[Risolto] imparare a scrivere macro
-
- Messaggi: 132
- Iscritto il: giovedì 7 marzo 2019, 12:11
[Risolto] imparare a scrivere macro
Ultima modifica di Raoul Duke il lunedì 15 aprile 2019, 10:40, modificato 1 volta in totale.
OpenOffice 4.1.5 con MacOS 10.13.6
Re: imparare a scrivere macro
Ciao, basta cercare: viewforum.php?f=35.
E poi la "bibbia" di Pitoniak: http://www.pitonyak.org/oo.php.
E poi la "bibbia" di Pitoniak: http://www.pitonyak.org/oo.php.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: imparare a scrivere macro
Aggiungo alle indicazioni di Charlie che su Pitoniak trovi molti esempi pratici, inoltre lascia perdere il registratore di macro, produce codice incomprensibile. Allego un esempio di codice che fa quello che hai chiesto nel post precedente
Al contrario del VBA di excel non puoi mai omettere i riferimenti al foglio e le proprietà value, string ecc
Allego alcuni appunti
Codice: Seleziona tutto
sub prova
Doc = ThisComponent ' il documento su cui lavori
Sheet = Doc.Sheets.getByName("Foglio1")
CellA1 = Sheet.getCellRangeByName("A1")
CellA10 = Sheet.getCellRangeByName("A10")
CellA10.Value = CellA1.Value ' in caso di valori numerici
CellA10.String = CellA1.String ' in caso di stringhe
CellA10.Formula = CellA1.Formula ' in caso di Formule
end sub
Allego alcuni appunti
-Come si fa tramite macro a leggere e/o scrivere le celle di calc?
Possiamo accedere alla cella in base alla sua posizione con la funzione (metodo) GetCellByPosition:
Doc = ThisComponent
Sheet = Doc.Sheets(0)
oCell = Sheet.GetCellByPosition(0,0)
Dove il primo 0 sta ad indicare la colonna, e il secondo 0 la riga.
oppure
oCell = Sheet.getCellRangeByName("A1")
Partendo sempre con la numerazione
Si avrà con 0,0 la cella A1
Per leggere il contenuto della cella e metterlo in una variabile per poi riutilizzarlo, è possibile procedere come 'segue:
Variabile = oCell.Value
'se la cella contiene un valore
Variabile = oCell.String
'se la cella contiene una stringa di testo
Variabile = oCell.Formula
'se la cella contiene una formula
Per scrivere in una cella basterà agire all'inverso e cioè:
oCell.Value = 1
'inserisce il valore 1 nella cella
oCell.String = "Uno"
'inserisce la stringa Uno nella cella
oCell.Formula = "=1"
'inserisce la formula =1 nella cella
Per semplificare il lavoro possiamo crearci dei sottoprogrammi e delle funzioni che eseguono questo compito.
Ad es:
Sub ScriviCella (foglio,colonna,riga,stringa)
' Scrivi una stringa in una cella
Doc = ThisComponent
Sheet = Doc.Sheets(foglio)
Cell = Sheet.getCellByPosition(colonna, riga)
Cell.string = stringa
End Sub
'_______________________________________________
Function LeggiCella (foglio,colonna,riga)
' Leggi una stringa da una cella
Doc = ThisComponent
Sheet = Doc.Sheets(foglio)
Cell = Sheet.getCellByPosition(colonna, riga)
LeggiCella=Cell.String
End function
Le sub sopra lavorano solo con le stringhe e occorre anche precisare in quale foglio si trovano le celle (anche in questo caso la numerazione
dei fogli parte da zero).
Se ci servisse il valore numerico contenuto ad es in A1 potremmo procedere così:
Valore=val(Function LeggiCella (0,0,0))
Se si preferisce riferirsi alle celle con il loro nome (A1, B5 ecc. ecc.) possiamo modificare le macro in questo modo:
Sub ScriviCellaPerNome (foglio,nomecella,stringa)
' Scrivi una stringa in una cella
Doc = ThisComponent
Sheet = Doc.Sheets(foglio)
Cell = Sheet.getCellRangeByName(nomecella)
Cell.string = stringa
End Sub
Function LeggiCellaPerNome (foglio,nomecella)
' Leggi una stringa da una cella
Doc = ThisComponent
Sheet = Doc.Sheets(foglio)
Cell = Sheet.getCellRangeByName(nomecella)
LeggiCellaPerNome=Cell.String
End function
Se addirittura vogliamo copiare da un documento all'altro riferendosi alle celle con il loro nome (A1, B5 ecc. ecc.) possiamo ulteriormente
modificare le macro in questo modo:
Sub ScriviCellaPerNome (Doc,foglio,nomecella,stringa)
' Scrivi una stringa in una cella
Sheet = Doc.Sheets(foglio)
Cell = Sheet.getCellRangeByName(nomecella)
Cell.string = stringa
End Sub
Function LeggiCellaPerNome (Doc,foglio,nomecella)
' Leggi una stringa da una cella
Sheet = Doc.Sheets(foglio)
Cell = Sheet.getCellRangeByName(nomecella)
LeggiCellaPerNome=Cell.String
End function
In questo caso dobbiamo fornire nella variabile Doc l'oggetto documento a cui ci si riferisce.
-----------------------------------
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
-
- Messaggi: 132
- Iscritto il: giovedì 7 marzo 2019, 12:11