Jak uruchamiać skrypty Pythona w makrach LibreOffice Calc

Tak. LibreOffice Calc może uruchamiać kod Pythona jako makro w procesie LibreOffice, a makro LibreOffice Basic może również wywoływać funkcję Pythona za pośrednictwem frameworka skryptowego LibreOffice. Jeśli celem jest odczyt lub zmiana komórek w otwartym arkuszu kalkulacyjnym, makro Pythona działające w procesie jest zazwyczaj najprostszym punktem wyjścia. Użyj wywołania Basic-to-Python, gdy istniejące makro Basic ma przekazać jedno zadanie do funkcji Pythona wielokrotnego użytku.

Te podejścia różnią się od uruchamiania zwykłego skryptu systemowego Pythona za pomocą polecenia powłoki. Standardowy zewnętrzny proces Pythona nie otrzymuje automatycznie obiektu dokumentu Calca. Aby uzyskać dostęp do skoroszytu, należy uruchomić makro Pythona za pośrednictwem LibreOffice lub celowo połączyć proces zewnętrzny z instancją LibreOffice za pomocą UNO.

Co oznacza „uruchom Pythona wewnątrz makra Calc”?

LibreOffice obsługuje wiele języków skryptowych za pośrednictwem swojego frameworka skryptowego. W makrze Pythona LibreOffice dostarcza obiekt kontekstu UNO, który umożliwia skryptowi dotarcie do bieżącego dokumentu i jego arkuszy. Makro Pythona to funkcja w .pymodule; krotka modułu g_exportedScriptsidentyfikuje funkcje, które LibreOffice powinien wyświetlać jako uruchamialne makra.

Makro Pythona może zostać uruchomione samodzielnie z menu makr Calca. Nie musi być wywoływane przez Basic. Jeśli masz już makro Basic i chcesz, aby wywoływało Pythona, dostawca skryptów LibreOffice lub nowsza Session.ExecutePythonScriptusługa ScriptForge mogą połączyć oba języki.

Które podejście powinieneś wybrać?

  • Użyj makra Pythona bezpośrednio, gdy zadanie dotyczy głównie Pythona i wymaga bieżącego dokumentu Calc. Pozwala to uniknąć przekazywania języków i jest najłatwiejsze do debugowania jako jeden skrypt.
  • Wywołaj Pythona z poziomu Basica, jeśli masz już kod Basica, przyciski lub zdarzenia dokumentu, które powinny pozostać na swoim miejscu, a chcesz, aby pomocnik Pythona wykonał skoncentrowane obliczenie lub operację na danych.
  • Użyj zewnętrznego procesu Pythona, jeśli potrzebujesz osobnego środowiska programistycznego lub pakietów Pythona, które nie są zawarte w LibreOffice. Skonfiguruj jawne połączenie z UNO; nie zakładaj, że skrypt uruchomiony z terminala widzi otwarty arkusz kalkulacyjny.

Na przykład, małe narzędzie do czyszczenia arkusza kalkulacyjnego można napisać w całości jako makro Pythona. Jeśli istniejący przycisk Basic już uruchamia raport, zachowaj makro przycisku i pozwól mu wywołać funkcję Pythona, która oblicza sumę raportu.

Jak utworzyć makro Pythona edytujące komórki programu Calc?

LibreOffice przechowuje osobiste skrypty Pythona w profilu użytkownika, skrypty aplikacji w katalogu instalacyjnym, a skrypty dokumentów w dokumencie. Na pierwszy test, osobisty skrypt jest wygodny, ponieważ jest dostępny z dowolnego otwartego dokumentu LibreOffice dla tego samego użytkownika. Nie jest on jednak przesyłany z plikiem ODS, więc inna osoba nie otrzyma go automatycznie wraz z arkuszem kalkulacyjnym.

Znajdź osobisty folder skryptów Pythona dla swojego systemu w Pomocy LibreOffice w sekcji „Organizacja i lokalizacja skryptów Pythona”. Typowe lokalizacje to m.in. %APPDATA%\LibreOffice\4\user\Scripts\pythonsystemy Windows i ~/.config/libreoffice/4/user/Scripts/pythonLinux. Rzeczywisty profil może się różnić; użyj lokalizacji udokumentowanej dla instalacji, zamiast tworzyć drugi katalog profilu na podstawie domysłów.

Utwórz plik o nazwie znajdującej się calc_tools.pyw osobistym folderze skryptów Pythona, a następnie dodaj ten prosty przykład:

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,)

Odczytuje wartość liczbową z komórki A1 aktywnego arkusza i zapisuje dwukrotnie większą wartość do komórki B1. XSCRIPTCONTEXTJest ona przekazywana do makra Pythona w LibreOffice w czasie wykonywania; nie jest to zwykła zmienna globalna Pythona, gdy ten sam plik jest uruchamiany poza LibreOffice. Funkcja publiczna jest wymieniona g_exportedScriptsw selektorze makr.

Zapisz plik, a następnie otwórz lub wróć do programu Calc i wybierz Narzędzia > Makra > Uruchom makra . W zależności od wersji LibreOffice lub tłumaczenia platformy, etykieta menu może być pojedyncza. Wybierz Moje makra > calc_tools > double_a1 i uruchom. Najpierw wpisz liczbę w komórce A1, a następnie sprawdź, czy komórka B1 zawiera podwojoną wartość. Jeśli moduł się nie pojawi, sprawdź, czy rozszerzenie pliku to .py, czy plik znajduje się w folderze Pythona odpowiedniego profilu i czy obsługa skryptów Pythona jest zainstalowana. Ponowne uruchomienie LibreOffice po dodaniu nowego modułu może pomóc odświeżyć listę skryptów.

W jaki sposób makro języka Basic może wywołać funkcję języka Python?

Aby wykonać wywołanie z języka Basic do Pythona, umieść moduł Pythona w folderze osobistych skryptów i wywołaj jego funkcję za pośrednictwem Sessionusługi ScriptForge. Ten przykład dodaje dwie wartości w Pythonie i zapisuje wynik w komórce B1 w bieżącym arkuszu Calc.

W calc_tools.py, zdefiniuj funkcję:

def add_values(first, second):
    return float(first) + float(second)

g_exportedScripts = (add_values,)

Następnie utwórz podstawowe makro w programie Calc i użyj:

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

Uruchom RunPythonHelperz selektora makr Basic. Jeśli wywołanie się powiedzie, B1 powinien wyświetlić 42. Odwołanie do skryptu ma postać module.py$function_name: w przypadku modułu w podfolderze lub innym miejscu przechowywania należy użyć składni i stałej lokalizacji udokumentowanej dla danej wersji ScriptForge. Zachowaj argumenty i zwracaj wartości dla typów danych, które oba języki mogą reprezentować w sposób czytelny, takich jak liczby, ciągi znaków i proste sekwencje.

CreateScriptServiceUdokumentowane pomocniki sesji ScriptForge są dostępne w nowoczesnych wersjach LibreOffice, ale nazwy menu i dołączone komponenty mogą się różnić w starszych kompilacjach lub kompilacjach pakietów dystrybucyjnych. Jeśli ta usługa jest niedostępna, należy użyć udokumentowanej metody dostawcy skryptów UNO w LibreOffice, która pobiera XScriptz URI skryptu i wywołuje go. Unikaj kopiowania fragmentu kodu do innej lokalizacji makra bez zmiany ustawienia lokalizacji.

Czy kod Pythona powinien być osobisty, współdzielony czy osadzony?

SkładowanieNajlepiej pasujeKompromis
Moje Makra / profil użytkownikaWłasne narzędzia wielokrotnego użytku w różnych dokumentachNie jest automatycznie uwzględniane podczas wysyłania arkusza kalkulacyjnego
Makra aplikacjiSkrypty zarządzane dla wielu użytkowników w ramach jednej instalacjiZwykle do instalacji lub konserwacji wymagany jest dostęp administratora
Makra dokumentówKod przeznaczony do powiązania z jednym dokumentemOdbiorcy mogą być zobowiązani do zezwalania na makra, testowania przenośności i zachowania bezpieczeństwa w docelowej wersji pakietu LibreOffice

W przypadku przepływu pracy zespołowej, przed utworzeniem skoroszytu wokół osobistego makra, zdecyduj, w jaki sposób odbiorcy otrzymają i zaufają kodowi. Jeśli logika Pythona musi towarzyszyć arkuszowi kalkulacyjnemu, przetestuj przechowywanie makr i monity bezpieczeństwa dokumentu w tych samych wersjach LibreOffice, z których korzystają odbiorcy. W przypadku wdrażania zarządzanego, administrator może spakować skrypty dla użytkowników lub rozpowszechnić rozszerzenie w ramach standardowych mechanizmów kontroli oprogramowania w organizacji.

Dlaczego makro może zniknąć lub nie działać?

  • Brak opcji lub modułu Pythona. W niektórych dystrybucjach GNU/Linux framework skryptowy Pythona LibreOffice jest opcjonalnym pakietem. Sprawdź instrukcje dotyczące pakowania LibreOffice w dystrybucji, jeśli makra Pythona nie pojawiają się w oknie dialogowym makr.
  • Skrypt został zapisany w niewłaściwym profilu. LibreOffice może korzystać z wielu profili użytkowników. Sprawdź ścieżkę profilu dla bieżącej instalacji i zapisz moduł w jego Scripts/pythonkatalogu.
  • Funkcja nie jest eksportowana. Dodaj ją do g_exportedScriptsfunkcji, którą chcesz uruchomić z selektora makr. Upewnij się, że składnia krotki zawiera przecinek na końcu krotki jednoelementowej.
  • Skrypt działa poza LibreOffice. XSCRIPTCONTEXT Istnieje dla makra uruchomionego przez LibreOffice, a nie wtedy, gdy ten sam plik jest uruchamiany poleceniem systemowym python. Użyj programu uruchamiającego makra lub skonfiguruj udokumentowane połączenie UNO.
  • Zabezpieczenia makr blokują osadzony kod. Sprawdź ustawienia zabezpieczeń makr w LibreOffice i włączaj kod tylko z zaufanego źródła. Obniżenie globalnego poziomu zabezpieczeń nie jest dobrym sposobem na rozwiązanie problemu.
  • Zaimportowany moduł nie widzi kontekstu dokumentu. Dokumenty LibreOffice, które XSCRIPTCONTEXTnie są przekazywane do zaimportowanych modułów. Przekaż potrzebny obiekt dokumentu lub arkusza do funkcji pomocniczych zamiast oczekiwać, że zaimportowane moduły odczytają ten globalny obiekt.
  • Brak widocznego wyjścia konsoli. Standardowe wyjście Pythona nie jest dostępne po uruchomieniu makra z menu Narzędzia > Makra. Aby uzyskać informację zwrotną, zapisz wynik w komórce, skorzystaj z usługi dialogowej LibreOffice lub zaloguj się do wybranej ścieżki pliku.

Jak bezpiecznie zweryfikować wynik?

Przetestuj z kopią arkusza kalkulacyjnego i znanymi danymi wejściowymi. Upewnij się, że makro Pythona pojawia się w programie uruchamiającym, uruchom je raz i porównaj komórkę wyjściową z ręcznie obliczonym wynikiem. W przypadku wywołania z języka Basic do Pythona przetestuj jedno proste dane wejściowe i upewnij się, że zwrócona wartość jest zapisywana w odpowiednim arkuszu. Unikaj rozpoczynania od skryptów, które usuwają arkusze, nadpisują duże zakresy lub wykonują polecenia systemu operacyjnego.

Gdy test się powiedzie, zdecyduj, jak skrypt zostanie zainstalowany na innych komputerach i udokumentuj wszelkie wymagane biblioteki Pythona lub założenia dotyczące wersji LibreOffice. Do makr wewnątrzprocesowych używane jest środowisko Pythona dołączone do LibreOffice; pakiety zainstalowane dla osobnego systemowego interpretera Pythona mogą być dla niego niedostępne. Jeśli potrzebujesz pakietów z innego interpretera, skorzystaj z podejścia external-process/UNO i przemyślanie skonfiguruj to połączenie.

Oficjalne referencje

Zostaw komentarz

Jak przenieść obraz w programie Microsoft Word

Jak przenieść obraz w programie Microsoft Word

Dowiedz się, jak przeciągać obraz w programie Word, wybierać opcje zawijania tekstu, zachowywać go w akapicie lub mocować na stronie oraz rozwiązywać problemy z obrazami, których nie można przenieść.

Jak wstawić pole wyboru w programie Excel: dwie proste metody

Jak wstawić pole wyboru w programie Excel: dwie proste metody

Dowiedz się, jak wstawić pole wyboru w programie Excel za pomocą narzędzia w komórce, zliczyć zaznaczone elementy za pomocą formuł lub dodać powiązany formant formularza w starszych wersjach programu na komputery stacjonarne.

Jak automatycznie wypełniać litery w programie Excel: od A do Z i dalej

Jak automatycznie wypełniać litery w programie Excel: od A do Z i dalej

Generuj litery od A do Z, małe litery lub etykiety powyżej Z w programie Excel za pomocą formuły z uchwytem wypełniania, SEKWENCJI lub wielokrotnego użytku listy niestandardowej.

Jak przekreślić tekst w programie Excel: skróty i metody krok po kroku

Jak przekreślić tekst w programie Excel: skróty i metody krok po kroku

Dowiedz się, jak przekreślać wiersze w programie Excel w systemie Windows, na komputerze Mac i w przeglądarce, formatować część komórki i usuwać wiersze bez usuwania ich wartości.

Czym jest Microsoft Access? Jak działają jego narzędzia bazodanowe

Czym jest Microsoft Access? Jak działają jego narzędzia bazodanowe

Microsoft Access to aplikacja bazy danych systemu Windows do przechowywania powiązanych rekordów, tworzenia zapytań, tworzenia formularzy wprowadzania danych i generowania raportów. Dowiedz się, jak działa i kiedy się sprawdza.

Importowanie i eksportowanie danych z programu Office Outlook 2010: przenoszenie danych za pomocą pliku PST

Importowanie i eksportowanie danych z programu Office Outlook 2010: przenoszenie danych za pomocą pliku PST

Dowiedz się, jak zaimportować plik PST do programu Outlook 2010 lub wyeksportować pocztę, kontakty, kalendarz i zadania. Postępuj zgodnie z odpowiednimi menu i unikaj pominiętych folderów lub duplikatów.

Zmiana wysokości i szerokości linii siatki w programie Word 2010

Zmiana wysokości i szerokości linii siatki w programie Word 2010

Dowiedz się, jak dostosować wysokość i szerokość linii siatki w programie Word 2010, zmienić widoczną częstotliwość linii oraz ustawić odstępy między liniami siatki w pionie i w poziomie.

Jak wstawić aktywną stronę internetową do slajdu programu PowerPoint

Jak wstawić aktywną stronę internetową do slajdu programu PowerPoint

Za pomocą dodatku LiveWeb możesz umieścić witrynę internetową na slajdzie programu PowerPoint, ustawić jej rozmiar i sposób odświeżania oraz sprawdzić zgodność przed prezentacją.

Odzyskiwanie hasła PST programu Outlook za pomocą jądra Nucleus

Odzyskiwanie hasła PST programu Outlook za pomocą jądra Nucleus

Odzyskaj zapomniane hasło PST programu Outlook, korzystając z bieżących instrukcji Kernela, obejmujących m.in. identyfikację właściwego pliku, wykonanie kopii zapasowej i sprawdzenie ograniczeń narzędzia.

Dodaj święta narodowe do kalendarza Outlook

Dodaj święta narodowe do kalendarza Outlook

Dodaj święta krajowe w nowym Outlooku, Outlooku w przeglądarce lub klasycznej wersji Outlooka. Dowiedz się, jak unikać duplikatów wydarzeń i sprawdzać, czy nie brakuje dat z lat 2026–2027.