Iniziamo a scrivere macro in Python

Creare una macro - Scrivere uno script - Usare le API
Rispondi
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Iniziamo a scrivere macro in Python

Messaggio da patel »

Supponiamo che io conosca la sintassi del pyton, cosa devo fare per scrivere una macro in pyton ?
1) devo necessariamente installare Pyton su windows oppure basta APSO ?
2) è necessario anche JRE ?
3) dove trovo esempi di macro già fatte tipo Pitonyak ?
Ultima modifica di charlie il sabato 7 luglio 2018, 17:57, modificato 1 volta in totale.
Motivazione: Corretto titolo
-------------------
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
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Pyton

Messaggio da vladboscaneanu »

1.Non è necessario installare python su Windows, LibreOffice ce l'ha già. Tuttavia, il python standard contiene un semplice editor del codice, che potrebbe facilitare la creazione dei script, perciò consiglio vivamente di averlo installato.
2. JRE serve per il coretto funzionamento del'intera suite, indipendemente se si usa python o no.
3. Questa é la guida ufficiale, mentre qui trovi un articolo tipo Pitonyak.
LibreOffice ultima versione su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Pyton

Messaggio da patel »

Buongiorno a tutti, ho scritto la mia prima macro in python

Codice: Seleziona tutto

import uno
import unohelper
def prova():
    doc = XSCRIPTCONTEXT.getDocument()
    active_sheet = doc.CurrentController.ActiveSheet
    cell1 = active_sheet.getCellRangeByName("B1")
    cell1.String = "Hello world"
    aa = active_sheet.getCellRangeByName("A1").String
    active_sheet.getCellRangeByName("A2").String = aa
g_exportedScripts = prova,
funziona, ma se utilizzo un pulsante per lanciarla ottengo l'errore allegato, perché ?
inoltre vorrei sapere:
1) le due import sembrano non essere necessarie, quando lo sono ?
2) anche

Codice: Seleziona tutto

g_exportedScripts = prova,
non è necessaria, a cosa serve ?
Allegati
Cattura.JPG
-------------------
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
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Pyton

Messaggio da vladboscaneanu »

Ciao patel.
In alcuni casi bisogna inserire un argomento opzionale, con asterisco, quindi sarebbe meglio se lo fai SEMPRE :

Codice: Seleziona tutto

def myFunction(*args):
    ....
Che cos'è un argomento opzionale, vedi la guida ufficiale python.
Nei tuo esempio l'importazione dei moduli uno e unohelper non è necessaria, tuttavia questi moduli contengono
tante funzioni, per lavorare meglio con LibreOffice.
g_ExportedScripts sarebbe l'elenco delle macro, che l'utente può vedere, quando sceglie di lanciare una macro
dal menu Macro-->Lancia una macro, nel tuo caso lui vedrà solo la macro prova
Sto scrivendo un foglio, per un ristorante, che permette di conteggiare e sistemare i piatti scelti dal cliente.
Per mostrarti la differenza tra la velocità d'esecuzione Basic vs. Python, troverai due menu, aggiunti da me : Macro Basic e Macro Python.
Entrambe permettono di nascondere le righe vuote, e rispettivamente, di mostrarli, con le voci hide_empty_rows e show_all .
Sotto basic il codice è scritto in Basic, quindi sotto python è Python.
Nel mio computer la differenza è enorme.
Allegati
Conteggio piatti.ods
(31.07 KiB) Scaricato 358 volte
LibreOffice ultima versione su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

Grazie dei suggerimenti, funzionano, e grazie del file allegato, sul mio pc la differenza è poco apprezzabile, comunque c'è.
Un'altra domanda, è possibile usare python senza installare l'estensione APSO ?
-------------------
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
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Python

Messaggio da vladboscaneanu »

Usare python, si. Ma devi trovare un modo per salvare le macro python nel documento, quello che fa APSO. Io, ad esempio, ho scritto per le mie esigenze , un codice per il python, versione desktop, quindi non devo installare nessuna estensione.
LibreOffice ultima versione su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

Se ho ben capito tu scrivi il codice con l'editor di python, unzippi il file ods e lo salvi nella cartella Python
-------------------
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
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Python

Messaggio da vladboscaneanu »

Esatto...in più,vanno aggiunte anche alcune righe nel file manifest.
LibreOffice ultima versione su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

ho trovato un codice per aprire un nuovo documento calc, aggiungere dati e creare un grafico, mi da errore su questa riga
oCharts.addNewByName( "Sales", makeRectangle( 8000, 1000, 16000, 10000 ), Array( oCellRangeAddress ), True, True )

quale modulo devo importare ?
-------------------
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
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Python

Messaggio da vladboscaneanu »

Allega lo screenshot del errore, cosi ti spiegherò un trucchetto, come leggere gli errori.
LibreOffice ultima versione su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

eccolo
Allegati
Cattura.JPG
Cattura.JPG (38.48 KiB) Visto 9111 volte
-------------------
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
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Python

Messaggio da vladboscaneanu »

Nel Modulo.py stai cercando di usare una funzione non-definita,vedi la linia 147...ti ricordi qualle sarebe il codice per Basic, in questo caso? Io non sono molto pratico con i grafici.
LibreOffice ultima versione su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

ti allego un file che produce un grafico in basic
Allegati
GraficoMacro.ods
(15.05 KiB) Scaricato 227 volte
-------------------
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
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Iniziamo a scrivere macro in Python

Messaggio da hubert lambert »

Salve patel,

Ecco per l'esempio la macro tradotta in python.
No so se conosci questa pagina del wiki: https://wiki.openoffice.org/wiki/Python ... _to_Python.
Cordiali saluti.

Codice: Seleziona tutto

from com.sun.star.awt import Rectangle
from com.sun.star.chart.ChartDataCaption import VALUE
from com.sun.star.chart.ChartDataRowSource import COLUMNS
def CreateChart(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    sName = "ADP_Chart"
    sDataRng = "A1:B6"
    oSheet = doc.Sheets.getByIndex(0)    # con le ultime versioni di LibreOffice si può anche scrivere: doc.Sheets[0]
    oAddress = oSheet.getCellRangeByName(sDataRng).getRangeAddress()
    oCharts = oSheet.getCharts()
    if not oCharts.hasByName(sName):
        # si può anche scrivere così: oRect = Rectangle(10000, 1000, 10000, 10000)
        oRect = Rectangle()
        oRect.X = 10000
        oRect.Y = 1000
        oRect.Width = 10000
        oRect.Height= 10000
        # The rectangle identifies the dimensions in 1/100 mm.
        # The address is the location of the data.
        # True indicates that column headings should be used.
        # False indicates that Row headings should not be used.
        oCharts.addNewByName(sName, oRect, (oAddress,), True, False)
    oChart = oCharts.getByName(sName)
    oChart.setRanges((oAddress,))
    oChartDoc = oChart.getEmbeddedObject()
    # oChartDoc.attachData(oAddress)
    oTitle = oChartDoc.getTitle()
    oTitle.String = "Andy - " #& Now
    # Create a diagram.
    oDiagram = oChartDoc.createInstance("com.sun.star.chart.XYDiagram")
    oChartDoc.setDiagram(oDiagram)
    oDiagram = oChartDoc.getDiagram()
    oDiagram.DataCaption = VALUE
    oDiagram.DataRowSource = COLUMNS
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

Grazie Hubert, funziona bene, altre domande:
1) nella finestra di errore mi viene segnalato il numero di linea che però non posso vedere su notepad e neppure su wordpad, che fare ?
2) dove trovo i nomi dei moduli da importare e la descrizione ?
-------------------
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
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Iniziamo a scrivere macro in Python

Messaggio da hubert lambert »

patel ha scritto:nella finestra di errore mi viene segnalato il numero di linea che però non posso vedere su notepad e neppure su wordpad, che fare ?
Ti consiglio un editor di testo più evoluto. Su Windows c'è Notepad++, che è un'ottima opzione. Ma ce ne molti altri, gratuiti o no.
patel ha scritto:dove trovo i nomi dei moduli da importare e la descrizione ?
In inglese tutto è lì : https://docs.python.org/2.7/library. In italiano ho trovato questo (ma un po vecchio) : https://docs.python.it/html/lib.
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Iniziamo a scrivere macro in Python

Messaggio da vladboscaneanu »

Ciao ragazzi.
humbert, amico, grazie per le risposte.
patel, scusa l'assenza, sono stato fuori per tutta la giornata.
Vorrei solo consigliare di evitare assolutamente che studi o impari il vecchio python, segnalato nel link da humbert.
Parti subito con python 3, scordati di python 2.
Vorrei anche consigliarti come editor o quello integrato con python, la versione standard, oppure per i professionisti c'è PyCharm, che può spaventare a prima vista, pero il riscontro, lavorando con lui, è enorme...ad esempio lavorando con la sua console ,riesci a vedere tutte le proprietà e i metodi, nel runtime.
Saluti.
LibreOffice ultima versione su Windows 10
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Iniziamo a scrivere macro in Python

Messaggio da hubert lambert »

Ciao,

Sono completamente d'accordo ma... non va dimenticato che OpenOffice utilizza ancora la versione Python2 ;) .
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Iniziamo a scrivere macro in Python

Messaggio da patel »

Come faccio ad utilizzare come predefinito per i file.py l'editor di IDLE Python 3.6 che ho installato su win ?

Risolto, basta cercare "C:\Program Files\Python36\Lib\idlelib\idle.bat"
-------------------
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
Rispondi