Pagina 1 di 1

come settare PyCharm per interagire con LibreOffice

Inviato: domenica 28 ottobre 2018, 15:55
da nickGiard
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

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

Re: come settare PyCharm per interagire con LibreOffice

Inviato: lunedì 19 novembre 2018, 0:26
da xergio
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).

Re: come settare PyCharm per interagire con LibreOffice

Inviato: lunedì 19 novembre 2018, 9:00
da charlie
Un saluto a @xergio, un gradito ritorno il suo :D .

Re: come settare PyCharm per interagire con LibreOffice

Inviato: lunedì 19 novembre 2018, 17:04
da xergio
charlie ha scritto:Un saluto a @xergio, un gradito ritorno il suo :D .
Grazie @charlie :D bello vedere tanto impegno nel forum!

Re: come settare PyCharm per interagire con LibreOffice

Inviato: venerdì 23 novembre 2018, 8:51
da patel
[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 ?

Re: come settare PyCharm per interagire con LibreOffice

Inviato: lunedì 3 dicembre 2018, 17:44
da xergio
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)

Re: come settare PyCharm per interagire con LibreOffice

Inviato: lunedì 3 dicembre 2018, 18:20
da patel
grazie xergio, ma pycharm è solo una comoda ide, quello che a me interessa è creare l'eseguibile con o senza pycharm

Re: come settare PyCharm per interagire con LibreOffice

Inviato: sabato 12 gennaio 2019, 21:29
da nickGiard
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

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

Re: come settare PyCharm per interagire con LibreOffice

Inviato: domenica 13 gennaio 2019, 13:40
da hubert lambert
Buongiorno a tutti,

Per la cronaca, l'ultima versione di Apso viene con un debugger incorporato ;) .
Cordiali saluti.