Home
» PC Tips
»
Eseguire codice Python in Calc tramite il sistema di macro di LibreOffice.
Eseguire codice Python in Calc tramite il sistema di macro di LibreOffice.
Se uno script Python viene eseguito dal terminale ma non riesce a leggere o modificare il foglio di calcolo aperto in Calc, probabilmente viene eseguito al di fuori di LibreOffice. Una macro Python di Calc deve essere eseguita all'interno del processo di LibreOffice, dove LibreOffice fornisce il contesto del documento attivo. Salva lo script come modulo nella cartella degli script Python del tuo utente, esporta la sua funzione con g_exportedScriptse avviala dalla finestra di dialogo delle macro di Calc.
Questo è il metodo più semplice per automatizzare una piccola operazione legata alla cartella di lavoro aperta. La guida di LibreOffice per gli script Python descrive sia le macro integrate nel processo che gli script Python collegati separatamente; i passaggi seguenti utilizzano il metodo integrato nel processo.
Perché un normale script Python non riesce a visualizzare il foglio di calcolo aperto?
LibreOffice espone il documento corrente a una macro Python in esecuzione tramite la variabile globale `open` XSCRIPTCONTEXT. Uno script avviato con il pythoncomando normale è un processo separato, quindi la variabile globale `open` non è automaticamente disponibile. Può comunque comunicare con LibreOffice, ma ciò richiede la configurazione di una connessione UNO a un processo di Office già in esecuzione. Per la prima macro, esegui la funzione all'interno di LibreOffice.
Una macro Python è una funzione all'interno di un .pymodulo. La g_exportedScriptstupla del modulo indica a LibreOffice quali funzioni visualizzare nell'elenco delle macro. Questi dettagli sono documentati nel manuale di riferimento sulla programmazione Python di LibreOffice .
Come si aggiunge una macro Python a Calc?
1. Individua la cartella degli script Python dell'utente
Utilizza la cartella personale "Le mie macro" se desideri uno script eseguibile da qualsiasi documento LibreOffice aperto per il tuo account utente. LibreOffice documenta la cartella come %APPDATA%\LibreOffice\4\user\Scripts\pythonsu Windows e $HOME/.config/libreoffice/4/user/Scripts/pythonsu Linux e macOS. Se le Scripts/pythoncartelle non esistono ancora, creale. La documentazione relativa alle posizioni degli script spiega anche gli altri contenitori di macro: Macro dell'applicazione e macro incorporate in un documento.
Posiziona il modulo macro nella cartella Scripts/python dell'utente, in modo che LibreOffice possa elencarlo in "Le mie macro".
Le macro dei documenti vengono memorizzate all'interno di un file specifico e sono accessibili solo quando tale documento è aperto. Per un'utilità personale riutilizzabile, la cartella "Macro personali" è solitamente più facile da gestire. Evita di modificare la cartella delle macro di LibreOffice, operazione che potrebbe richiedere i permessi di amministratore.
2. Crea ed esporta una piccola funzione di test
Apri un editor di testo semplice, crea hello_calc.pyla cartella sopra e aggiungi:
La funzione recupera il documento attualmente connesso alla chiamata della macro, seleziona il suo primo foglio e scrive una stringa di prova innocua in A1. L'ultima riga è importante: senza la tupla esportata, la funzione potrebbe non apparire come una macro eseguibile. Salvare il file come testo semplice con l' .pyestensione, non come documento RTF o file con estensione .py.txt.
La funzione esportata utilizza XSCRIPTCONTEXT per accedere al documento aperto e scrivere un valore di prova nella cella A1.
LibreOffice fornisce XSCRIPTCONTEXTquesta variabile al modulo macro. Non la passa automaticamente ai moduli importati dal tuo codice, quindi mantieni il primo test autonomo. Se in seguito suddividi le funzioni riutilizzabili in altri moduli, segui le linee guida di LibreOffice per l'importazione dei moduli Python .
3. Apri un file Calc ed esegui la funzione esportata
Apri un foglio di calcolo di prova in Calc. Utilizza una copia o una cartella di lavoro vuota durante lo sviluppo.
Seleziona Strumenti > Macro > Esegui macro .
Nell'elenco della libreria, espandi Le mie macro , scegli il modulo Python e seleziona hello_calcuna macro dall'elenco dei nomi.
Fai clic su Esegui .
La stessa funzione può essere avviata tramite l'estensione APSO, che LibreOffice consiglia per lo scripting Python in-process e che fornisce anche una shell Python. Non è necessario APSO per il flusso di base "Esegui macro" descritto qui.
Seleziona la funzione hello_calc esportata in Le mie macro, quindi eseguila da Calc.Un valore visibile in A1 conferma che la macro di test ha raggiunto il documento Calc e ha modificato una cella.
Cosa succede se la macro non è presente o sembra non fare nulla?
Eseguite questi controlli in ordine, anziché modificare le impostazioni di sicurezza generali:
Il modulo non è presente nell'elenco: verifica che il file si trovi nel Scripts/pythonpercorso utente corretto, che abbia un .pysuffisso e che contenga una g_exportedScriptstupla scritta correttamente. Riapri la finestra di dialogo delle macro; se LibreOffice continua a non visualizzare il file appena aggiunto, chiudi e riavvia LibreOffice, quindi controlla di nuovo.
Il nome della macro è mancante: assicurati che la tupla esportata includa l'oggetto funzione, ad esempio (hello_calc,). La virgola rende questa una tupla Python a un solo elemento.
Nel terminale non appare nulla: l'output print()non è disponibile quando le macro Python vengono eseguite dalla finestra di dialogo standard delle macro. Il test sopra riportato scrive in A1, quindi il risultato è visibile nel foglio. Per il debug interattivo, la shell di APSO visualizza l'output.
L'importazione non riesce: l'installazione di un pacchetto per il Python del sistema non garantisce che il runtime Python di LibreOffice possa importarlo. Il pacchetto deve essere disponibile nel percorso Python del runtime; le linee guida ufficiali sull'importazione descrivono i percorsi dei moduli utente e condivisi. Inizia testando la macro senza importazioni opzionali.
Viene visualizzato un avviso di sicurezza: esegui solo script che hai scritto o che hai esaminato e di cui ti fidi. La sicurezza delle macro serve a limitare il codice non sicuro; non abbassare il livello di sicurezza globale solo per eseguire la macro di un documento sconosciuto. Consulta le opzioni di sicurezza delle macro di LibreOffice se hai bisogno di capire un avviso.
Scegli l'approccio con processo esterno solo quando l'automazione deve essere avviata da un terminale, un'utilità di pianificazione o un'altra applicazione. LibreOffice richiede l'avvio del processo di Office tramite una pipe o un socket e la connessione attraverso il suo bridge UNO; un normale script autonomo non è equivalente a una macro Calc in-process.
Come si può verificare che la macro abbia funzionato correttamente?
Dopo aver cliccato su Esegui, osserva la cella A1 del primo foglio. Dovrebbe contenere "Hello from Python" e la barra della formula dovrebbe mostrare lo stesso testo quando selezioni A1. Se la cella rimane invariata, verifica che la cartella di lavoro desiderata fosse attiva e che la macro sia stata selezionata da "Le mie macro". Una volta superato questo test minimo, sostituisci il codice di prova con il tuo calcolo reale e testalo su una copia della cartella di lavoro prima di utilizzarlo con dati importanti.