Strona główna
» Porady PC
»
Uruchamianie Pythona w programie Calc za pomocą systemu makr pakietu LibreOffice
Uruchamianie Pythona w programie Calc za pomocą systemu makr pakietu LibreOffice
Jeśli skrypt Pythona uruchamia się w terminalu, ale nie może odczytać ani zmienić arkusza kalkulacyjnego otwartego w Calcu, prawdopodobnie działa poza LibreOffice. Makro Pythona Calca musi zostać uruchomione w procesie LibreOffice, gdzie LibreOffice dostarcza kontekst aktywnego dokumentu. Zapisz skrypt jako moduł w folderze skryptów Pythona użytkownika, wyeksportuj jego funkcję za pomocą g_exportedScriptsi uruchom ją z okna dialogowego makra Calca.
To najprostsza ścieżka dla małej automatyzacji powiązanej z otwartym skoroszytem. Aktualna pomoc dotycząca skryptów Pythona w LibreOffice opisuje zarówno makra w procesie, jak i oddzielnie połączone skrypty Pythona; poniższe kroki wykorzystują metodę w procesie.
Dlaczego zwykły skrypt Pythona nie widzi otwartego arkusza kalkulacyjnego?
LibreOffice udostępnia bieżący dokument działającemu makro Pythona za pośrednictwem zmiennej globalnej XSCRIPTCONTEXT. Skrypt uruchamiany za pomocą standardowego pythonpolecenia to osobny proces, więc zmienna globalna nie jest automatycznie dostępna. Nadal może komunikować się z LibreOffice, ale wymaga to skonfigurowania połączenia UNO z już działającym procesem pakietu Office. W przypadku pierwszego makra należy uruchomić funkcję w LibreOffice.
Makro Pythona to funkcja w .pymodule. Krotka modułu informuje LibreOffice, które funkcje mają być wyświetlane na liście makr. Szczegóły te są udokumentowane w podręczniku programowania w Pythonieg_exportedScripts LibreOffice .
Jak dodać makro Pythona do Calc?
1. Znajdź folder skryptów użytkownika Python
Użyj osobistej lokalizacji Moje Makra, jeśli chcesz skrypt, który można uruchomić z dowolnego otwartego dokumentu LibreOffice na Twoim koncie użytkownika. LibreOffice dokumentuje ten folder tak samo %APPDATA%\LibreOffice\4\user\Scripts\pythonw systemach Windows, $HOME/.config/libreoffice/4/user/Scripts/pythonLinux i macOS. Jeśli Scripts/pythonfoldery jeszcze nie istnieją, utwórz je. Informacje o lokalizacjach skryptów wyjaśniają również inne kontenery makr: makra aplikacji i makra osadzone w dokumencie.
Umieść moduł makr w folderze użytkownika Scripts/python, aby LibreOffice mógł go wyświetlić w sekcji Moje makra.
Makra dokumentów są przechowywane w określonym pliku i są dostępne tylko wtedy, gdy dokument jest otwarty. Aby zapewnić możliwość wielokrotnego użytku osobistego, folder Moje Makra jest zazwyczaj łatwiejszy w utrzymaniu. Unikaj modyfikowania folderu makr w całej aplikacji LibreOffice, ponieważ może to wymagać uprawnień administratora.
2. Utwórz i wyeksportuj małą funkcję testową
Otwórz edytor zwykłego tekstu, utwórz hello_calc.pyw folderze powyżej i dodaj:
Funkcja pobiera dokument aktualnie powiązany z wywołaniem makra, wybiera jego pierwszy arkusz i zapisuje nieszkodliwy ciąg testowy w komórce A1. Ostatni wiersz jest ważny: bez wyeksportowanej krotki funkcja może nie pojawić się jako makro możliwe do uruchomienia. Zapisz plik jako zwykły tekst z rozszerzeniem .xml .py, a nie jako dokument RTF ani plik z rozszerzeniem .xml .py.txt.
Funkcja eksportowana używa XSCRIPTCONTEXT w celu uzyskania dostępu do otwartego dokumentu i zapisania wartości testowej w komórce A1.
LibreOffice dostarcza dane XSCRIPTCONTEXTdo modułu makr. Nie przekazuje automatycznie tej zmiennej do modułów importowanych przez kod, więc zachowaj pierwszy test jako samodzielny. Jeśli później rozdzielisz funkcje wielokrotnego użytku na inne moduły, postępuj zgodnie ze wskazówkami LibreOffice dotyczącymi importowania modułów Pythona .
3. Otwórz plik Calc i uruchom wyeksportowaną funkcję
Otwórz arkusz kalkulacyjny testowy w programie Calc. Podczas tworzenia arkusza użyj jego kopii lub pustego skoroszytu.
Wybierz Narzędzia > Makra > Uruchom makro .
Na liście bibliotek rozwiń Moje makra , wybierz moduł Python i wybierz hello_calcjedną z nazw makr.
Kliknij Uruchom .
Tę samą funkcję można uruchomić z rozszerzenia APSO, które LibreOffice zaleca do tworzenia skryptów Pythona w trakcie pracy i które udostępnia również powłokę Pythona. APSO nie jest potrzebne do wykonania podstawowego procesu uruchamiania makr opisanego tutaj.
Wybierz wyeksportowaną funkcję hello_calc w obszarze Moje makra, a następnie uruchom ją w programie Calc.Widoczna wartość w komórce A1 potwierdza, że makro testowe dotarło do dokumentu Calc i zmieniło komórkę.
A co jeśli makro brakuje lub wydaje się, że nic nie robi?
Wykonaj poniższe sprawdzenia po kolei, zamiast zmieniać ogólne ustawienia zabezpieczeń:
Moduł nie jest wymieniony: sprawdź, czy plik znajduje się w dokładnej Scripts/pythonścieżce użytkownika, ma .pysufiks i zawiera poprawnie napisaną g_exportedScriptskrotkę. Otwórz ponownie okno dialogowe makra; jeśli LibreOffice nadal nie wyświetla nowo dodanego pliku, zamknij i uruchom ponownie LibreOffice, a następnie sprawdź ponownie.
Brak nazwy makra: upewnij się, że eksportowana krotka zawiera obiekt funkcji, na przykład (hello_calc,). Przecinek oznacza, że jest to jednoelementowa krotka Pythona.
W terminalu nic się nie pojawia: dane wyjściowe print()nie są dostępne, gdy makra Pythona są uruchamiane ze standardowego okna dialogowego makr. Powyższy test zapisuje dane do A1, więc wynik jest widoczny w arkuszu. W celu interaktywnego debugowania, powłoka APSO wyświetla dane wyjściowe.
Import kończy się niepowodzeniem: zainstalowanie pakietu Python w systemie nie gwarantuje, że środowisko wykonawcze Pythona w LibreOffice będzie mogło go zaimportować. Pakiet musi być dostępny w ścieżce Pythona środowiska wykonawczego; oficjalne wytyczne dotyczące importu opisują ścieżki użytkownika i modułów współdzielonych. Zacznij od przetestowania makra bez opcjonalnych importów.
Pojawia się ostrzeżenie bezpieczeństwa: uruchamiaj tylko skrypty napisane lub sprawdzone przez siebie i zaufane. Zabezpieczenia makr służą ograniczeniu niebezpiecznego kodu; nie obniżaj globalnego poziomu zabezpieczeń tylko po to, aby uruchomić makro nieznanego dokumentu. Zapoznaj się z opcjami zabezpieczeń makr w LibreOffice , aby zrozumieć ostrzeżenie.
Wybierz podejście z procesem zewnętrznym tylko wtedy, gdy automatyzacja musi zostać uruchomiona z terminala, harmonogramu lub innej aplikacji. LibreOffice wymaga uruchomienia procesu pakietu Office za pomocą potoku lub gniazda i połączenia przez most UNO; zwykły samodzielny skrypt nie jest równoważny z makrem Calc działającym w procesie.
Jak można sprawdzić, czy makro zadziałało?
Po kliknięciu przycisku Uruchom, spójrz na komórkę A1 w pierwszym arkuszu. Powinna ona zawierać tekst Hello from Python , a pasek formuły powinien wyświetlać ten sam tekst po zaznaczeniu komórki A1. Jeśli komórka pozostanie niezmieniona, sprawdź, czy wybrany skoroszyt był aktywny i czy makro zostało wybrane z Moich Makr. Po pomyślnym zakończeniu tego prostego testu zastąp wynik testu rzeczywistym obliczeniem i przetestuj go na kopii skoroszytu, zanim użyjesz go do ważnych danych.