Python uitvoeren in Calc via het macrosysteem van LibreOffice

Als een Python-script vanuit je terminal wordt uitgevoerd maar de in Calc geopende spreadsheet niet kan lezen of wijzigen, wordt het waarschijnlijk buiten LibreOffice uitgevoerd. Een Python-macro voor Calc moet binnen het LibreOffice-proces worden uitgevoerd, waar LibreOffice de actieve documentcontext levert. Sla het script op als een module in je gebruikersmap met Python-scripts, exporteer de functie met `export` g_exportedScriptsen start het vanuit het macrodialoogvenster van Calc.

Dit is de eenvoudigste manier om een ​​kleine automatisering te implementeren die gekoppeld is aan de geopende werkmap. De huidige helpfunctie voor Python-scripts in LibreOffice beschrijft zowel macro's die binnen hetzelfde proces worden uitgevoerd als afzonderlijk gekoppelde Python-scripts; de onderstaande stappen maken gebruik van de methode waarbij macro's binnen hetzelfde proces worden uitgevoerd.

Waarom ziet een standaard Python-script het geopende spreadsheet niet?

LibreOffice stelt het huidige document beschikbaar aan een actieve Python-macro via de globale variabele ` XSCRIPTCONTEXT.`. Een script dat wordt gestart met uw reguliere pythonopdracht is een apart proces, waardoor de globale variabele niet automatisch beschikbaar is. Het kan nog steeds communiceren met LibreOffice, maar daarvoor moet een UNO-verbinding met een reeds actief Office-proces worden opgezet. Voor een eerste macro kunt u de functie het beste binnen LibreOffice zelf uitvoeren.

Een Python-macro is een functie in een .pymodule. De g_exportedScriptstuple van de module vertelt LibreOffice welke functies in de macrolijst moeten worden weergegeven. Deze details staan ​​beschreven in de Python-programmeerhandleiding van LibreOffice .

Hoe voeg je een Python-macro toe aan Calc?

1. Zoek de map met Python-scripts van de gebruiker.

Gebruik de persoonlijke map 'Mijn macro's ' als u een script wilt dat vanuit elk geopend LibreOffice-document voor uw gebruikersaccount kan worden uitgevoerd. LibreOffice beschrijft deze map als volgt %APPDATA%\LibreOffice\4\user\Scripts\pythonop Windows, $HOME/.config/libreoffice/4/user/Scripts/pythonLinux en macOS. Als de Scripts/pythonmappen nog niet bestaan, maak ze dan aan. De referentie voor scriptlocaties legt ook de andere macrocontainers uit: toepassingsmacro's en macro's die in een document zijn ingesloten.

Een Python-bestand met de naam hello_calc.py in de map Scripts/python van de LibreOffice-gebruiker.
Plaats de macromodule in de map Scripts/python van de gebruiker, zodat LibreOffice deze kan weergeven onder Mijn macro's.

Documentmacro's worden opgeslagen in een specifiek bestand en zijn alleen toegankelijk zolang dat document geopend is. Voor een herbruikbaar persoonlijk hulpprogramma is 'Mijn macro's' meestal gemakkelijker te onderhouden. Vermijd het wijzigen van de macro-map van LibreOffice, aangezien hiervoor mogelijk beheerdersrechten vereist zijn.

2. Maak en exporteer een kleine testfunctie

Open een teksteditor, maak een bestand aan hello_calc.pyin de bovenstaande map en voeg het volgende toe:

def hello_calc(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets[0]
    sheet.getCellRangeByName("A1").setString("Hello from Python")

g_exportedScripts = (hello_calc,)

De functie haalt het document op dat momenteel is gekoppeld aan de macro-aanroep, selecteert het eerste werkblad en schrijft een onschadelijke teststring in A1. De laatste regel is belangrijk: zonder de geëxporteerde tuple verschijnt de functie mogelijk niet als een uitvoerbare macro. Sla het bestand op als platte tekst met de .pyextensie .txt, niet als een rich-text-document of een bestand met de extensie .txt .py.txt.

Python-macrocode die XSCRIPTCONTEXT gebruikt en hello_calc in g_exportedScripts weergeeft.
De geëxporteerde functie gebruikt XSCRIPTCONTEXT om toegang te krijgen tot het geopende document en een testwaarde naar cel A1 te schrijven.

LibreOffice levert XSCRIPTCONTEXTdeze variabele aan de macromodule. Deze variabele wordt niet automatisch doorgegeven aan modules die door uw code worden geïmporteerd, dus houd de eerste test op zichzelf staand. Als u later herbruikbare functies in andere modules onderbrengt, volg dan de richtlijnen van LibreOffice voor het importeren van Python-modules .

3. Open een Calc-bestand en voer de geëxporteerde functie uit.

  1. Open een testspreadsheet in Calc. Gebruik een kopie of een lege werkmap tijdens het ontwikkelen.
  2. Kies Extra > Macro's > Macro uitvoeren .
  3. Vouw in de bibliotheeklijst ' Mijn macro's' uit , kies de Python-module en selecteer hello_calceen macronaam.
  4. Klik op Uitvoeren .

Dezelfde functie kan worden gestart vanuit de APSO-extensie, die LibreOffice aanbeveelt voor Python-scripting binnen hetzelfde proces en die ook een Python-shell biedt. Voor de basisprocedure 'Macro uitvoeren' die hier wordt beschreven, hebt u APSO niet nodig.

Macroselector in LibreOffice met hello_calc gemarkeerd onder Mijn macro's en de knop Uitvoeren zichtbaar
Selecteer de geëxporteerde functie hello_calc onder Mijn macro's en voer deze vervolgens uit vanuit Calc.
LibreOffice Calc toont "Hallo vanuit Python" in de geselecteerde cel A1.
Een zichtbare waarde in cel A1 bevestigt dat de testmacro het Calc-document heeft bereikt en een cel heeft gewijzigd.

Wat als de macro ontbreekt of niets lijkt te doen?

Voer deze controles in de juiste volgorde uit in plaats van algemene beveiligingsinstellingen te wijzigen:

  • De module wordt niet weergegeven: controleer of het bestand zich in het juiste gebruikerspad bevindt Scripts/python, een .pyextensie heeft en een correct gespelde g_exportedScriptstuple bevat. Heropen het macrodialoogvenster; als LibreOffice een nieuw toegevoegd bestand nog steeds niet weergeeft, sluit LibreOffice dan af en start het opnieuw op, en controleer het vervolgens nogmaals.
  • De macronnaam ontbreekt: zorg ervoor dat de geëxporteerde tuple het functieobject bevat, bijvoorbeeld (hello_calc,). De komma maakt dit een Python-tuple met één element.
  • Er verschijnt niets in de terminal: uitvoer print()is niet beschikbaar wanneer Python-macro's worden uitgevoerd vanuit het standaard macrodialoogvenster. De bovenstaande test schrijft naar A1, dus het resultaat is zichtbaar in het werkblad. Voor interactieve foutopsporing geeft de shell van APSO de uitvoer weer.
  • Een import mislukt: het installeren van een pakket voor uw systeem-Python garandeert niet dat de Python-runtime van LibreOffice dit kan importeren. Het pakket moet beschikbaar zijn in het Python-pad van de runtime; de ​​officiële importrichtlijnen beschrijven gebruikers- en gedeelde modulepaden. Begin met het testen van de macro zonder optionele imports.
  • Er verschijnt een beveiligingswaarschuwing: voer alleen scripts uit die u zelf hebt geschreven of die u hebt gecontroleerd en vertrouwt. Macrobeveiliging is bedoeld om onveilige code te beperken; verlaag het algemene beveiligingsniveau niet alleen om een ​​macro in een onbekend document uit te voeren. Raadpleeg de macrobeveiligingsopties van LibreOffice als u een waarschuwing wilt begrijpen.

Kies alleen voor de externe-procesbenadering als uw automatisering moet starten vanuit een terminal, taakplanner of andere toepassing. LibreOffice vereist dat u het Office-proces start met een pipe of socket en verbinding maakt via de UNO-brug; een gewoon zelfstandig script is niet gelijk aan een in-process Calc-macro.

Hoe kun je controleren of de macro gewerkt heeft?

Nadat u op Uitvoeren hebt geklikt, controleert u cel A1 op het eerste werkblad. Deze zou 'Hello from Python' moeten bevatten en de formulebalk zou dezelfde tekst moeten weergeven wanneer A1 is geselecteerd. Als de cel ongewijzigd blijft, controleert u of het betreffende werkblad actief was en of de macro was geselecteerd in 'Mijn macro's'. Zodra deze minimale test is geslaagd, vervangt u de testtekst door uw daadwerkelijke berekening en test u deze op een kopie van het werkblad voordat u deze op belangrijke gegevens gebruikt.

Laat een reactie achter

Beveilig geselecteerde tekst van de schrijver met een sectiewachtwoord.

Beveilig geselecteerde tekst van de schrijver met een sectiewachtwoord.

Vergrendel een specifiek gedeelte van een document om het te beschermen tegen routinematige bewerkingen, terwijl de rest van het document bruikbaar blijft. Leer ook wanneer bestandsversleuteling de beste optie is.

Maak spreadsheettekst leesbaar in de donkere modus van LibreOffice Calc

Maak spreadsheettekst leesbaar in de donkere modus van LibreOffice Calc

Verbeter de leesbaarheid van tekst in spreadsheets door het thema, de celkleur, de opvulling en de voorwaardelijke opmaak in Calc te controleren.

Geeft LibreOffice Calc formules weer als tekst? Herstel de resultaten

Geeft LibreOffice Calc formules weer als tekst? Herstel de resultaten

Leer waarom Calc formuletekst weergeeft in plaats van berekende waarden en los problemen op met de weergavemodus, tekstopgemaakte cellen, apostrofen of verouderde resultaten.

Voeg schrijversbrieven samen met een logo en spreadsheetvelden.

Voeg schrijversbrieven samen met een logo en spreadsheetvelden.

Maak een herbruikbare Writer-mailmerge met Calc-ontvangersgegevens en een gedeelde ingesloten afbeelding, en bekijk en sla de gepersonaliseerde brieven vervolgens op.

Beperk optionele diagnostische functies en updategegevens in LibreOffice.

Beperk optionele diagnostische functies en updategegevens in LibreOffice.

Schakel de optionele update-statistieken en crashrapportagemeldingen van LibreOffice uit en controleer vervolgens wat de instellingen omvatten en hoe u ze kunt verifiëren.

Gebruik reguliere expressies in LibreOffice Writer om tekst in batches te bewerken.

Gebruik reguliere expressies in LibreOffice Writer om tekst in batches te bewerken.

Zorg voor schone spaties, vind gestructureerde tekst en herschik namen met Writer-regex-patronen die je kunt bekijken voordat je ze vervangt.

Stel Arabische en Hebreeuwse alinea's in Writer in op rechts-naar-links lezen.

Stel Arabische en Hebreeuwse alinea's in Writer in op rechts-naar-links lezen.

Schakel de bidirectionele bedieningselementen van Writer in, stel de alinea-indeling van rechts naar links in en controleer gemengde Arabische of Hebreeuwse tekst zonder Engelse woorden en cijfers te verstoren.

Calibri en Arial herstellen in LibreOffice zonder te hoeven gissen

Calibri en Arial herstellen in LibreOffice zonder te hoeven gissen

Installeer metrische compatibele Linux-lettertypen of koppel LibreOffice-alternatieven, rekening houdend met de licentie- en lay-outverschillen van Microsoft-lettertypen.

Maak invulbare PDF's van formulieren in LibreOffice Writer.

Maak invulbare PDF's van formulieren in LibreOffice Writer.

Voeg bruikbare tekstvelden, selectievakjes en keuzelijsten toe in Writer en exporteer vervolgens een pdf-bestand dat de ontvangers kunnen invullen en opslaan.

Zorg ervoor dat LibreOffice PDF's de lettertypen behouden die u hebt gebruikt.

Zorg ervoor dat LibreOffice PDF's de lettertypen behouden die u hebt gebruikt.

Herstel ontbrekende of vervangen lettertypen in LibreOffice Writer-pdf's, kies het juiste exportprofiel en controleer welke lettertypen zijn ingesloten voordat u het bestand deelt.