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 utworzyć i wysłać zaproszenie na spotkanie w programie Outlook

Jak utworzyć i wysłać zaproszenie na spotkanie w programie Outlook

Utwórz zaproszenie na spotkanie w programie Outlook, dodaj wymaganych lub opcjonalnych uczestników, wybierz godzinę, dodaj szczegóły dotyczące usługi Teams, ustaw cykliczność i sprawdź odpowiedzi w nowej lub klasycznej wersji programu Outlook.

Jak dodać limit znaków do komórek w programie Excel

Jak dodać limit znaków do komórek w programie Excel

Użyj ustawień sprawdzania poprawności danych programu Excel, aby określić maksymalną, minimalną, dokładną długość lub zakres znaków, a następnie dodaj przejrzyste monity i alerty o błędach.

Jak naprawić błąd „Nie możemy zaplanować spotkania” w programie Outlook

Jak naprawić błąd „Nie możemy zaplanować spotkania” w programie Outlook

Napraw błąd programu Outlook „Nie możemy zaplanować spotkania”, sprawdzając obsługę konta, odświeżając logowanie do usługi Teams i naprawiając klasyczny dodatek do programu Outlook.

Jak zmienić język w pakiecie Office 365 (Microsoft 365)

Jak zmienić język w pakiecie Office 365 (Microsoft 365)

Zmień menu pakietu Office 365, ustawienia pisowni i gramatyki lub wprowadzanie tekstu z klawiatury w aplikacjach komputerowych i usłudze Microsoft 365 dla sieci Web.

Jak automatycznie przekierować wiadomości e-mail w programie Outlook 365

Jak automatycznie przekierować wiadomości e-mail w programie Outlook 365

Dowiedz się, jak automatycznie przekazywać dalej wszystkie lub wybrane wiadomości e-mail w programie Outlook 365, korzystając z ustawień przekazywania dalej lub reguł, a także jak zatrzymać przekazywanie dalej i naprawić zablokowane przekazywanie wiadomości zewnętrznych.

Jak korzystać z Edytora Microsoft w programie Word dla usługi Microsoft 365

Jak korzystać z Edytora Microsoft w programie Word dla usługi Microsoft 365

Użyj Edytora Microsoft w programie Word dla usługi Microsoft 365, aby sprawdzić pisownię, gramatykę, przejrzystość i zwięzłość, przejrzeć sugestie i dostosować ustawienia sprawdzania poprawności.

Jak dodać kanał RSS do programu Outlook 365 w klasycznej wersji programu Outlook

Jak dodać kanał RSS do programu Outlook 365 w klasycznej wersji programu Outlook

Dowiedz się, jak dodać kanał RSS do programu Outlook 365 w klasycznej wersji programu Outlook dla systemu Windows, znaleźć prawidłowy adres URL kanału, zarządzać subskrypcjami i rozwiązywać typowe problemy z kanałami RSS.

Jak przejść do strony w programie Word dla usługi Microsoft 365

Jak przejść do strony w programie Word dla usługi Microsoft 365

Możesz przejść bezpośrednio do dowolnej strony w programie Word dla Microsoft 365 za pomocą kombinacji klawiszy Ctrl+G lub F5, względnych numerów stron lub panelu nawigacji, korzystając ze skrótów klawiaturowych systemu Windows i Mac.

Jak dodawać kontakty do programu Outlook w sieci Web, systemie Windows i na urządzeniach mobilnych

Jak dodawać kontakty do programu Outlook w sieci Web, systemie Windows i na urządzeniach mobilnych

Dowiedz się, jak dodawać kontakty do aplikacji Outlook w sieci Web, nowej aplikacji Outlook, klasycznej aplikacji Outlook i aplikacji mobilnej, a także jak działa synchronizacja kontaktów i importowanie plików CSV.

Jak zmienić kolor tła w programie Microsoft Word lub dodać obraz

Jak zmienić kolor tła w programie Microsoft Word lub dodać obraz

Zmień kolor strony w programie Word, dodaj obraz tła, usuń go i włącz drukowanie tła w systemie Windows lub Mac, korzystając z przejrzystych i aktualnych instrukcji.