Pannello di Controllo Moderatore ]

come settare PyCharm per interagire con LibreOffice

Creare una macro - Scrivere uno script - Usare le API

come settare PyCharm per interagire con LibreOffice

Messaggioda nickGiard » domenica 28 ottobre 2018, 16:55

Buongiorno a tutti gli appassionati
vladboscaneanu, che ringrazio, mi suggeriva tempo fa di utilizzare PyCharm per lo sviluppo di funzioni Python.
Effettivamente tale ambiente è veramente professionale, anche se non si può nascondere una certa pesantezza e verbosità nei suggerimenti di stile.
L'architettura del mio software prevede la gestione dei menù che controllano le funzioni principali in Basic che agiscono sui fogli e le celle (non vedo vantaggi nel delegare queste funzioni ad altri ambienti che poi devono interagire comunque con i service UNO).
Mentre i dati prelevati dai Range con la funzione Rg.DataArray() come array di array vengono elaborati in maniera efficiente e veloce in Python che viene richiamato dal servizio MasterScriptProviderFactory che restituisce quanto elaborato in forma di array. La mia routine per chi interessa in fondo.
Efficienza e velocità sono veramente strabilianti ma un unico neo: NON riesco a fare interrompere l'esecuzione del Python per ispezionare le variabili e scoprire eventuali errori per un debug passo passo utilizzando PyCharm, ossia se l'avvio di oScript.invoke(args, Array(), Array()) può entrare in PyCharm (ovviamente già aperto e con il file.py caricato) ed attivare il suo debug e i suoi punti di interruzione .
Lamento che purtroppo non trovo molto materiale che illustri in modo semplice tali collegamenti con altri linguaggi, e quello che trovo rimandano ad esempi senza spiegare in modo elementare come utilizzarli o sono per me troppo complessi.
Chiedo pertanto a chi ne sa più di me
1) Se esiste tale possibilità, posso pensare ad un listener o socket che consenta a PyCharm di inserirsi ed appropriarsi o comunicare col processo di LibreOffice
2) La procedura passo passo e chiaramente esplicativa sui vari settings da attivare in PyCharm perché esso sia in grado di intercettare uno script lanciato da LibreOffice con oScript.invoke(args, Array(), Array())

Ringrazio in anticipo
Nicola Giardinelli


Codice: Seleziona tutto   Espandi visualeStringi visuale
Function _invokePyFunc(func As String,  args, Optional sFilePy)'  As Array
    MyErrorMsg("WrapPy._invokePyFunc:" & func) ' segnala rout errore
    Dim  sFunctionPy, oMSPF, oScript
    If IsMissing(sFilePy) Then sFilePy = "MyPyFunct.py" ' quello implementato

    sFunctionPy = "vnd.sun.star.script:" & sFilePy & "$" & func & _
            "?language=Python&location=user" 

    if IsNullEmpty(gScriptProvider) then
        oMSPF = createUnoService( _
         "com.sun.star.script.provider.MasterScriptProviderFactory")
        gScriptProvider = oMSPF.createScriptProvider("")
    end if
    On Local Error GoTo ErrorHandler
    '
    oScript = gScriptProvider.getScript(sFunctionPy)
    Dim pyReturn ' Empty se Py Error
   '
    pyReturn = oScript.invoke(args, Array(), Array())
   '
    _invokePyFunc = pyReturn
    MyErrorMsg()
    Exit Function
   '
ErrorHandler:
    Dim msg As String, toFix As String
    msg = Error$
    toFix = ""
    If 1 = Err AND InStr(Error$, "an error occurred during file opening") Then
        msg = "Non apro the script file."
        toFix = "Make sure the user\Scripts\python\" & sFilePy & ".py."
    End If
    MsgBox msg & chr(13) & toFix, 16, "Error " & Err & " calling " & func
    'MyErrorMsg()
End Function
Nicola con LibreOffice 5.4.5 (x64) su Windows 7 Home Premium
nickGiard
 
Messaggi: 17
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda xergio » lunedì 19 novembre 2018, 1:26

Ciao nickGiard,
sembra fattibile vedendo qui: https://wiki.documentfoundation.org/Mac ... th_PyCharm e qui https://wiki.documentfoundation.org/Mac ... #Debugging e infine qui https://wiki.documentfoundation.org/Mac ... hon_Basics , personalmente non ho fatto uso di questo collegamento (uso PyCharm per lavoro).
Ultima modifica di xergio il lunedì 19 novembre 2018, 18:00, modificato 1 volta in totale.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Avatar utente
xergio
 
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 22:54
Località: Arzignano (Vicenza)

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda charlie » lunedì 19 novembre 2018, 10:00

Un saluto a @xergio, un gradito ritorno il suo :D .
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: 5754
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda xergio » lunedì 19 novembre 2018, 18:04

charlie ha scritto:Un saluto a @xergio, un gradito ritorno il suo :D .

Grazie @charlie :D bello vedere tanto impegno nel forum!
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Avatar utente
xergio
 
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 22:54
Località: Arzignano (Vicenza)

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda patel » venerdì 23 novembre 2018, 9:51

[OT]
Ciao xergio, ho letto che usi pycharm per lavoro, io ho iniziato da poco a programmare in python, vorrei sapere come creare un eseguibile che giri su mac attivabile col doppio clic. Esiste un modo che non richieda l'uso del terminale ?
-------------------
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: 3154
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda xergio » lunedì 3 dicembre 2018, 18:44

Ciao patel,
scusa il ritardo.
Non uso PyCharm per creare eseguibili, quindi purtroppo non ti so dire (uso Python ecc. per Odoo su server *nix)
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Avatar utente
xergio
 
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 22:54
Località: Arzignano (Vicenza)

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda patel » lunedì 3 dicembre 2018, 19:20

grazie xergio, ma pycharm è solo una comoda ide, quello che a me interessa è creare l'eseguibile con o senza pycharm
-------------------
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: 3154
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda nickGiard » sabato 12 gennaio 2019, 22:29

Buona sera a tutti gli appassionati
riscrivo in sintesi la mia nota di risposta che non trovo nelle bozze.
In sostanza, ringrazio xergio per le sue indicazioni, i cui link rimangono purtroppo troppo complessi.
Ho risolto il mio problema, ossia la necessità di debug passo passo di una funzione python che riceve come parametro un DataArray di un range Calc tramite script.provider.MasterScriptProviderFactory, gestendo il tutto direttamente da Python che recupera i dati dal foglio elettronico.
Codice: Seleziona tutto   Espandi visualeStringi visuale
def AArrayFromCalcSelection():
    # Restituisce la selezione attiva in calc; Non fa parte di LO
    # installato in C:\Users\Nicola\AppData\Roaming\Python\Python35\site-packages
    import win32com.client  # pywin32 pakage
    oSM = win32com.client.Dispatch('com.sun.star.ServiceManager')
    oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
    oWb = oDesk.getCurrentComponent()
    oSel = oWb.CurrentSelection
    aaDataArray = oSel.DataArray
    return aaDataArray

Ovviamente funziona solo in Window, e preventivamente con PyCharm ho installato pywin32 pakage.
Questa è l'equivalente del basic CreateObject("com.sun.star.ServiceManager") nel mondo COM e da questo oggetto Application Global Servicemanager discendono tutti gli altri.
Lascio a charlie valutare se questa soluzione possa definirsi risolta, di cui sto leggendo la Guida-alla-programmazione-in-OpenOffice.org-BASIC :D :bravo: .
Grazie ancora per il supporto.
Nicola
Nicola con LibreOffice 5.4.5 (x64) su Windows 7 Home Premium
nickGiard
 
Messaggi: 17
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: come settare PyCharm per interagire con LibreOffice

Messaggioda hubert lambert » domenica 13 gennaio 2019, 14:40

Buongiorno a tutti,

Per la cronaca, l'ultima versione di Apso viene con un debugger incorporato ;) .
Cordiali saluti.
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
hubert lambert
Volontario
Volontario
 
Messaggi: 141
Iscritto il: venerdì 9 giugno 2017, 13:48


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite