Pannello di Controllo Moderatore ]

[Risolto] imparare a scrivere macro

Discussioni sull'applicazione per i fogli di calcolo

[Risolto] imparare a scrivere macro

Messaggioda Raoul Duke » domenica 14 aprile 2019, 17:00

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.
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
Raoul Duke
 
Messaggi: 87
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: imparare a scrivere macro

Messaggioda charlie » domenica 14 aprile 2019, 23:30

Ciao, basta cercare: viewforum.php?f=35.
E poi la "bibbia" di Pitoniak: http://www.pitonyak.org/oo.php.
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 6.0.7
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5874
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: imparare a scrivere macro

Messaggioda patel » lunedì 15 aprile 2019, 8:26

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

Codice: Seleziona tutto   Espandi visualeStringi visuale
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

Al contrario del VBA di excel non puoi mai omettere i riferimenti al foglio e le proprietà value, string ecc

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.
-----------------------------------
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3242
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: imparare a scrivere macro

Messaggioda Raoul Duke » lunedì 15 aprile 2019, 10:40

grazie mille a entrambi
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 87
Iscritto il: giovedì 7 marzo 2019, 13:11


Torna a Calc

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti