Pagina 1 di 1

Iniziamo a scrivere macro in Python

Inviato: venerdì 20 aprile 2018, 17:42
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 ?

Re: Iniziamo a scrivere macro in Pyton

Inviato: sabato 21 aprile 2018, 0:08
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.

Re: Iniziamo a scrivere macro in Pyton

Inviato: sabato 7 luglio 2018, 11:34
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 ?

Re: Iniziamo a scrivere macro in Pyton

Inviato: sabato 7 luglio 2018, 17:25
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.

Re: Iniziamo a scrivere macro in Python

Inviato: sabato 7 luglio 2018, 18:55
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 ?

Re: Iniziamo a scrivere macro in Python

Inviato: sabato 7 luglio 2018, 19:42
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.

Re: Iniziamo a scrivere macro in Python

Inviato: domenica 8 luglio 2018, 6:46
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

Re: Iniziamo a scrivere macro in Python

Inviato: domenica 8 luglio 2018, 15:00
da vladboscaneanu
Esatto...in più,vanno aggiunte anche alcune righe nel file manifest.

Re: Iniziamo a scrivere macro in Python

Inviato: domenica 8 luglio 2018, 19:34
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 ?

Re: Iniziamo a scrivere macro in Python

Inviato: domenica 8 luglio 2018, 20:29
da vladboscaneanu
Allega lo screenshot del errore, cosi ti spiegherò un trucchetto, come leggere gli errori.

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 6:29
da patel
eccolo

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 6:42
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.

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 8:45
da patel
ti allego un file che produce un grafico in basic

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 10:56
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

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 12:48
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 ?

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 14:08
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.

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 18:13
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.

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 19:03
da hubert lambert
Ciao,

Sono completamente d'accordo ma... non va dimenticato che OpenOffice utilizza ancora la versione Python2 ;) .

Re: Iniziamo a scrivere macro in Python

Inviato: lunedì 9 luglio 2018, 21:09
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"