Vytváření skriptů Pythonu s knihovnouScriptForge

Rozdíly mezi jazyky Basic a Python

Knihovna Scriptforge je k dispozici pro jazyky Basic a Python. Většina služeb, metod a vlastností funguje v obou programovacích jazycích stejně. Vzhledem k odlišnostem mezi nimi si však uživatel používající ScriptForge v Pythonu musí být vědom některých charakteristik této knihovny:

tip

Další informace o skriptech Pythonu v LibreOfficeDev naleznete na stránce Nápověda pro skripty Pythonu v LibreOfficeDev.


Spouštění skriptů Pythonu v LibreOfficeDev

Podle toho, čeho hodláte dosáhnout, můžete zvolit jeden z následujících přístupů, jak spouštět skripty Pythonu v LibreOfficeDev:

tip

Plánujete-li spouštět skripty v rámci procesu LibreOfficeDev, doporučuje se nainstalovat rozšíření APSO (Alternative Script Organizer for Python). K vývoji skriptů Pythonu mimo LibreOfficeDev však můžete zvolit svoje oblíbené integrované vývojové prostředí (IDE).


Spouštění skriptů v rámci procesu LibreOfficeDev

Pomocí rozšíření APSO

Nejsnazším způsobem jak začít v LibreOfficeDev se skripty Pythonu, je nainstalovat rozšíření APSO. Po instalaci otevřete nějakou aplikaci LibreOfficeDev a zvolte Nástroje - Makra - Organize Python scripts.

V hlavním okně APSO zvolte Menu - Python shell.

tip

APSO můžete otevřít také výchozí zkratkou Alt+Shift+F11.


Poté můžete začít psát příkazy Pythonu, po provedení každého řádku kódu se v shellu vypíše odpovídající výstup.

Abyste mohli začít používat knihovnu ScriptForge, je nutné importovat metodu CreateScriptService, díky níž budete moci přistupovat k službám poskytovaným touto knihovnou. V níže uvedeném příkladu se používá služba Basic pro zobrazení dialogu.


    from scriptforge import CreateScriptService
    bas = CreateScriptService("Basic")
    bas.MsgBox("Hello!")
  

Výše uvedený příklad spustíte tak, že postupně po jedné zadáte řádky do shellu Pythonu a po každé stisknete klávesu Enter.

Spouštět můžete příkazy Pythonu používající libovolnou službu ScriptForge. Následující část kódu například vytvoří prázdné okno Writeru pomocí služby UI.


    ui = CreateScriptService("UI")
    doc = ui.CreateDocument("Writer")
  

Vytváření souborů se skripty Pythonu

Vlastní skripty Pythonu můžete vytvářet a upravovat ve svém oblíbeném textovém editoru. Později je zavoláte z jakékoliv aplikace LibreOfficeDev.

Prvním krokem je zjistit, kde jsou uloženy uživatelské skripty. To je popsáno na stránce Uspořádání a umístění skriptů Pythonu.

Poté můžete ve složce s uživatelskými skripty Pythonu vytvořit textový soubor, například sf_test.py, a začít se psaním skriptů.

Následuje jednoduchý příklad, v němž se získá z buňky Calcu číselná hodnota a zvětší se o 1. Do souboru sf_test.py přepište následující kód.


    from scriptforge import CreateScriptService
    doc = CreateScriptService("Calc")
    
    def increment_cell(args=None):
        value = doc.GetValue("A1")
        value += 1
        doc.SetValue("A1", value)
    
    g_exportedScripts = (increment_cell, )
  

V příkladu je vytvořena funkce increment_cell. Proměnná g_exportedScripts je n-tice určující, které funkce se v LibreOfficeDev zobrazí jako uživatelské skripty.

Chcete-li tento skript spustit v dokumentu Calcu:

  1. Vytvořte nebo otevřete soubor Calcu.

  2. Zadejte do buňky "A1" na aktuálním listu libovolnou číselnou hodnotu.

  3. Zvolte Nástroje - Makra - Spustit makro.

  4. Ve výběru knihovny zvolte Moje makra - sf_test. Poté vyberte ze seznamu Název makra funkci increment_cell.

  5. Klepněte na Spustit. Hodnota v buňce "A1" se zvětšila o 1.

Pro spouštění skriptů Pythonu můžete použít také APSO:

  1. Nejprve APSO otevřete volbou Nástroje - Makra - Organize Python scripts.

  2. V seznamu maker přejděte na My macros - sf_test - increment_cell.

  3. Klepněte na Execute.

Spouštění skriptů odděleně od procesu LibreOfficeDev

Určení instalační složky

První krokem ke spouštění skriptů z odděleného procesu je najít složky, v níž je LibreOfficeDev nainstalován. Lze to provést několika způsoby, ScriptForge ale nabízí rychlou možnost, jak cestu k instalaci identifikovat. Za tím účelem otevřete shell Pythonu APSO a zadejte do něj:


    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    fs.FileNaming = "SYS"
    inst_dir = fs.InstallFolder
    print(inst_dir)
  

Výstupem výše uvedeného kódu je základní adresář, v němž je LibreOfficeDev nainstalován. K výsledné cestě potřebujete přidat podsložku „program“, abyste získali základní složku, z níž budete spouštět v odděleném procesu skripty Pythonu.

Jako výsledek výše uvedeného kódu Pythonu jste získali například cestu /usr/lib/libreoffice/. Poté je cestou pro spouštění skriptů Pythonu /usr/lib/libreoffice/program.

Spuštění LibreOfficeDev s nastavením socketů

Abyste mohli spouštět skripty Pythonu z odděleného procesu, je nutné spustit LibreOfficeDev s několika dalšími parametry, které určují název hostitele a port, pomocí kterého bude externí proces komunikovat s procesem s aplikací LibreOfficeDev.

Otevřete příkazový řádek operačního systému, přejděte v něm do složky „program“ v instalačním adresáři LibreOfficeDev a zadejte:

./soffice --accept='socket,host=localhost,port=2021;urp;'

Tento příkaz spustí LibreOfficeDev s otevřeným komunikačním kanálem, prostřednictvím kterého s ním mohou jiné procesy vyměňovat zprávy.

Výše uvedený příkaz otevře úvodní obrazovku LibreOfficeDev. Chcete-li otevřít určitou aplikaci, například Writer, přidejte k příkazu přepínač --writer.

./soffice --writer --accept='socket,host=localhost,port=2021;urp;'

Poznamenejte si parametry host a port, které mají v tomto příkladu hodnoty localhost a 2021.

Spuštění externího shellu Pythonu

Spusťte shell Pythonu ze složky program v cestě s instalací LibreOfficeDev. Instalační cestu zjistíte podle postupu popsaného výše.

V systému Linux / MacOS:

$ cd /usr/lib/libreoffice/program

$ python

V systému Windows:

$ cd C:\Program Files\LibreOffice\program\

$ python.exe

Otevře se shell Pythonu, v němž můžete zadávat příkazy, které se provedou v LibreOfficeDev. Nejprve je ale nutné nastavit socketové připojení.


    from scriptforge import ScriptForge, CreateScriptService
    ScriptForge(hostname='localhost', port=2021)
  
note

Read the section Setting PYTHONPATH below in case of errors importing scriptforge.py or uno.py.


Na druhém řádku výše uvedeného kódu je určeno nastavení host a port, díky němuž může shell Pythonu komunikovat se spuštěným procesem LibreOfficeDev, který byl otevřen se stejným nastavením socketů.

Poté můžete spouštět další příkazy Pythonu, budou moci komunikovat s procesem LibreOfficeDev. Například:


    ui = CreateScriptService("UI")
    bas = CreateScriptService("Basic")
    doc = ui.OpenDocument("~/Documents/myFile.ods")
    bas.MsgBox(doc.DocumentType)
  

Setting PYTHONPATH

Depending on your operating system's configuration you will need to set the environment variable PYTHONPATH in order to import the scriptforge.py library, which in turn requires importing the uno.py library.

Use your operating system's file search tool to determine the directory where both these files are located.

For instance, on a default Ubuntu installation both files may be located at:

In this case, set the environment variable PYTHONPATH as follows before starting the Python interpreter:

export PYTHONPATH=/usr/lib/libreoffice/program:/usr/lib/python3/dist-packages

note

The location of these files will be different for each operating system and LibreOfficeDev installation method.