Da. LibreOffice Calc poate rula cod Python ca o macrocomandă în cadrul procesului LibreOffice, iar o macrocomandă LibreOffice Basic poate apela, de asemenea, o funcție Python prin intermediul cadrului de scripting LibreOffice. Dacă obiectivul dvs. este să citiți sau să modificați celulele din foaia de calcul deschisă, o macrocomandă Python în proces este de obicei cel mai simplu punct de plecare. Utilizați un apel Basic-către-Python atunci când o macrocomandă Basic existentă ar trebui să transfere o sarcină unei funcții Python reutilizabile.
Aceste abordări sunt diferite de lansarea unui script Python obișnuit de sistem cu o comandă shell. Un proces Python extern normal nu primește automat obiectul document din Calc. Pentru accesul la registrul de lucru, rulați o macrocomandă Python prin LibreOffice sau conectați în mod deliberat un proces extern la o instanță LibreOffice prin UNO.
Ce înseamnă „a rula Python într-o macrocomandă Calc”?
LibreOffice acceptă mai multe limbaje de scripting prin intermediul cadrului său de scripting. Într-o macrocomandă Python, LibreOffice furnizează un obiect contextual UNO care permite scriptului să ajungă la documentul curent și la foile sale de calcul. O macrocomandă Python este o funcție dintr-un .pymodul; tuplul modulului g_exportedScriptsidentifică funcțiile pe care LibreOffice ar trebui să le afișeze ca macrocomenzi rulabile.
O macrocomandă Python poate rula singură din meniul de macrocomenzi din Calc. Nu trebuie neapărat să fie apelată de Basic. Dacă aveți deja o macrocomandă Basic și doriți ca aceasta să apeleze Python, furnizorul de scripturi LibreOffice sau noul Session.ExecutePythonScriptserviciu ScriptForge pot face legătura între cele două limbaje.
Ce abordare ar trebui să alegi?
- Folosește direct o macrocomandă Python atunci când sarcina este în mare parte Python și necesită documentul Calc curent. Evită transferul de limbă și este cel mai ușor de depanat ca un singur script.
- Apelați Python din Basic atunci când aveți deja cod Basic, butoane sau evenimente din documente care ar trebui să rămână la locul lor și doriți ca un ajutor Python să efectueze un calcul sau o operațiune de date specifică.
- Folosește un proces Python extern atunci când ai nevoie de un mediu de dezvoltare separat sau de pachete Python care nu sunt incluse în LibreOffice. Configurați o conexiune UNO explicită; nu presupune că un script pornit dintr-un terminal poate vedea foaia de calcul deschisă.
De exemplu, un mic instrument de curățare a foilor de calcul poate fi scris în întregime ca o macrocomandă Python. Dacă un buton Basic existent rulează deja un raport, păstrați macrocomanda butonului și lăsați-l să apeleze o funcție Python care calculează totalul raportului.
Cum creezi o macrocomandă Python care editează celulele Calc?
LibreOffice stochează scripturile Python personale în profilul de utilizator, scripturile la nivel de aplicație în directorul de instalare și scripturile documentului cu un document. Pentru un prim test, un script personal este convenabil deoarece este disponibil din orice document LibreOffice deschis pentru același utilizator. Cu toate acestea, nu este livrat împreună cu un fișier ODS, deci o altă persoană nu îl va primi automat împreună cu foaia de calcul.
Găsiți folderul personal de scripturi Python pentru sistemul dvs. în Ajutorul LibreOffice, la secțiunea „Organizarea și locația scripturilor Python”. Locațiile comune includ %APPDATA%\LibreOffice\4\user\Scripts\pythonpe Windows și ~/.config/libreoffice/4/user/Scripts/pythonpe Linux. Profilul real poate varia; utilizați locația documentată pentru instalare, în loc să creați un al doilea director de profil prin presupunere.
Creați un fișier numit calc_tools.pyîn folderul personal de scripturi Python, apoi adăugați acest exemplu simplu:
def double_a1(args=None):
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.getCurrentController().getActiveSheet()
source = sheet.getCellRangeByName("A1")
target = sheet.getCellRangeByName("B1")
target.setValue(source.getValue() * 2)
g_exportedScripts = (double_a1,)
Aceasta citește valoarea numerică din celula A1 a foii active și scrie dublul acestei valori în B1. XSCRIPTCONTEXTeste furnizată unei macrocomenzi LibreOffice Python la momentul execuției; nu este o funcție globală Python obișnuită atunci când același fișier este lansat în afara LibreOffice. Funcția publică este listată în , g_exportedScriptsdeci apare în selectorul de macrocomenzi.
Salvați fișierul, apoi deschideți sau reveniți la Calc și alegeți Instrumente > Macrocomenzi > Executare macrocomenzi . În funcție de versiunea LibreOffice sau de traducerea platformei, eticheta meniului poate fi singulară. Selectați Macrocomenzile mele > calc_tools > double_a1 și executați-l. Introduceți mai întâi un număr în A1, apoi verificați dacă B1 conține valoarea dublată. Dacă modulul nu apare, confirmați că extensia fișierului este .py, fișierul se află în folderul Python al profilului corect și că este instalat suportul pentru scripturi Python. Repornirea LibreOffice după adăugarea unui modul nou poate ajuta la reîmprospătarea listei de scripturi.
Cum poate o macrocomandă Basic să apeleze o funcție Python?
Pentru un apel Basic-to-Python, plasați un modul Python în folderul scripturi personale și apelați funcția sa prin serviciul ScriptForge Session. Acest exemplu adună două valori în Python și scrie rezultatul în B1 în foaia Calc curentă.
În calc_tools.py, definiți funcția:
def add_values(first, second):
return float(first) + float(second)
g_exportedScripts = (add_values,)
Apoi creați o macrocomandă Basic în Calc și utilizați:
Sub RunPythonHelper()
Dim session As Object
Dim result As Variant
Dim sheet As Object
session = CreateScriptService("Session")
result = session.ExecutePythonScript( _
session.SCRIPTISPERSONAL, _
"calc_tools.py$add_values", _
12, 30)
sheet = ThisComponent.CurrentController.getActiveSheet()
sheet.getCellRangeByName("B1").setValue(result)
End Sub
Executați RunPythonHelperdin selectorul de macrocomenzi Basic. Dacă apelul reușește, B1 ar trebui să afișeze 42. Referința scriptului urmează forma module.py$function_name; pentru un modul dintr-un subfolder sau o altă locație de stocare, utilizați sintaxa și constanta de locație documentate pentru versiunea ScriptForge respectivă. Păstrați argumentele și returnați valorile pentru tipurile de date pe care ambele limbaje le pot reprezenta corect, cum ar fi numere, șiruri de caractere și secvențe simple.
CreateScriptServiceȘi instrumentele de asistență pentru sesiuni ScriptForge documentate sunt disponibile în versiunile moderne de LibreOffice, dar numele meniurilor și componentele incluse pot diferi în versiunile mai vechi sau în cele incluse în pachetele de distribuție. Dacă acest serviciu nu este disponibil, utilizați metoda documentată UNO script-provider din LibreOffice, care obține un XScriptURI de la un script și îl invocă. Evitați copierea unui fragment de cod pentru o altă locație a macrocomenzii fără a modifica setarea locației sale.
Ar trebui ca codul Python să fie personal, partajat sau încorporat?
| Depozitare | Cea mai bună potrivire | Compromis |
| Macrocomenzile mele / profilul utilizatorului | Instrumente reutilizabile în toate documentele | Nu este inclus automat când trimiteți foaia de calcul |
| Macrocomenzi de aplicație | Scripturi gestionate pentru mai mulți utilizatori pe o singură instalare | De obicei, necesită acces de administrator pentru instalare sau întreținere |
| Macrocomenzi pentru documente | Cod destinat a fi asociat cu un singur document | Este posibil ca destinatarii să fie nevoiți să permită macrocomenzi; să testeze portabilitatea și comportamentul de securitate pe versiunea țintă LibreOffice. |
Pentru un flux de lucru în echipă, decideți cum vor primi destinatarii codul și cum vor avea încredere în acesta înainte de a construi un registru de lucru în jurul unei macrocomenzi personale. Dacă logica Python trebuie să însoțească foaia de calcul, testați stocarea macrocomenzilor și solicitările de securitate ale documentului pe aceleași versiuni de LibreOffice pe care le utilizează destinatarii dvs. Pentru implementarea gestionată, un administrator poate împacheta scripturi pentru utilizatori sau poate distribui o extensie în cadrul controalelor software normale ale organizației.
De ce ar putea lipsi sau eșua macrocomanda?
- Opțiunea sau modulul Python lipsește. Pe unele distribuții GNU/Linux, framework-ul de scripting Python al LibreOffice este un pachet opțional. Verificați instrucțiunile de împachetare LibreOffice ale distribuției dacă macrocomenzile Python nu apar în caseta de dialog macrocomenzi.
- Scriptul este salvat în profilul greșit. LibreOffice poate folosi mai multe profiluri de utilizator. Confirmați calea profilului pentru instalarea în curs de desfășurare și salvați modulul în
Scripts/pythondirectorul său.
- Funcția nu este exportată. Adăugați-o la
g_exportedScriptspentru o funcție pe care intenționați să o rulați din selectorul de macrocomenzi. Asigurați-vă că sintaxa tuplului include virgula finală pentru un tuplu cu un singur element.
- Scriptul rulează în afara LibreOffice.
XSCRIPTCONTEXT Există pentru o macrocomandă lansată de LibreOffice, nu atunci când același fișier este pornit cu comanda sistemului python. Folosește executabilul de macrocomenzi sau configurează o conexiune UNO documentată.
- Securitatea macrocomenzilor blochează codul încorporat. Verificați setările de securitate macrocomenzi din LibreOffice și activați codul doar dintr-o sursă în care aveți încredere. Reducerea nivelului global de securitate nu este o scurtătură bună pentru depanare.
- Un modul importat nu poate vedea contextul documentului. Documente LibreOffice care
XSCRIPTCONTEXTnu sunt transmise modulelor importate. Transmiteți documentul sau obiectul de foaie necesar în funcțiile de ajutor în loc să așteptați ca modulele importate să citească acel context global.
- Nu există nicio ieșire vizibilă în consolă. Ieșirea standard a Python nu este disponibilă atunci când o macrocomandă este executată din meniul Instrumente > Macrocomenzi. Pentru feedback, scrieți un rezultat într-o celulă, utilizați un serviciu de dialog LibreOffice sau înregistrați-l într-o cale de fișier deliberată.
Cum verifici rezultatul în siguranță?
Testați cu o copie a foii de calcul și o intrare cunoscută. Confirmați că macrocomanda Python apare în runner, rulați-o o dată și comparați celula de ieșire cu un rezultat calculat manual. Pentru un apel Basic-to-Python, testați o intrare simplă și confirmați că valoarea returnată este scrisă în foaia dorită. Evitați să începeți cu scripturi care șterg foi, suprascriu intervale mari sau execută comenzi ale sistemului de operare.
Când testul funcționează, decideți cum va fi instalat scriptul pe alte computere și documentați orice biblioteci Python necesare sau presupuneri privind versiunea LibreOffice. Mediul Python inclus în LibreOffice este cel utilizat pentru macrocomenzile din proces; pachetele instalate pentru un interpretor Python de sistem separat pot să nu fie disponibile pentru acesta. Dacă aveți nevoie de pachete de la un alt interpretor, utilizați abordarea external-process/UNO și configurați acea conexiune în mod deliberat.
Referințe oficiale