LibreOffice Dokumente mit Python generieren

Ziel dieses Artikels ist es unter Windows (in meinem Fall eine XP-64 Installation) mit Python und Dreampie ein LibreOffice-Calc Sheet zu generieren.

Dazu geht man wie folgt vor:

  • Falls man Dreampie noch nicht hat: Hier Dreampie herunterladen, installieren und ausführen.
  • LibreOffice kommt mit seiner eigenen Python-Installation daher. Um unter Windows an die wichtigen UNO Module heranzukommen muss man etwas tricksen.
    Das geht mit folgendem Code:

    import os
    import sys
    import subprocess
    
    def import_uno():
        libreoffice_path = "C:\\Program Files (x86)\\LibreOffice 3\\"
       
        python_lo_executable = libreoffice_path + "program\\python.exe"
        python_lo_script = """-cimport os; print(os.environ["URE_BOOTSTRAP"]); print(os.environ["UNO_PATH"]); print(os.environ["PATH"])"""
        path_to_uno = libreoffice_path + "Basis\\program"
    
        # Umgebungsvariablen von LO-Python per subprocess herausholen
        process = subprocess.Popen([python_lo_executable, python_lo_script], stdout=subprocess.PIPE)
        result = process.communicate()
        env = os.environ
        env["URE_BOOTSTRAP"], env["UNO_PATH"], env_path, ignore = result[0].split("\n")
    
        existing_paths = env["PATH"].split(";")
        for path in env_path.split(";"):
            if path not in existing_paths:
                existing_paths.append(path)
        env["PATH"] = ";".join(existing_paths)
    
        sys.path.append(path_to_uno)
    
    import_uno()
    import uno

    Diesen Code kopieren und in das untere Fenster von Dreampie einfügen.

  • In meinem Fall ist LibreOffice unter C:\Program Files (x86)\LibreOffice 3\ installiert. Die Variable auf Zeile 6 muss entsprechend angepasst werden.
  • Mit Ctrl+Enter den Code in Dreampie ausführen.
  • LibreOffice lässt sich nur per Socket von aussen steuern. Damit ein solcher Socket geöffnet wird, muss LibreOffice mit einigen zusätzlichen Parametern gestartet werden.
    "C:\Program Files (x86)\LibreOffice 3\program\soffice.exe" -calc -accept=socket,host=localhost,port=2002;urp;

    Den Code kopieren in einem DOS-Fenster ausführen.

  • Zurück in Dreampie. Folgender Code erstellt uns die wichtigsten Objekte.
    local = uno.getComponentContext()
    resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)
    context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
    desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)
  • Dieser Code erstellt ein neues Calc Dokument und schreibt etwas Text.
    doc = desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, ())
    sheet = doc.getSheets().getByIndex(0)
    sheet.getCellByPosition(0, 0).setString("Hallo Welt")
    sheet.getCellByPosition(0, 1).setString("Noch'n Text")
  • Bestehende Dokumente werden wie folgt geladen:
    import unohelper
    doc = desktop.loadComponentFromURL(
        unohelper.systemPathToFileUrl(os.path.abspath("C:\Test.ods")), "_blank", 0, ())
    
  • Profit!

Danny’s OOo Library

Viele Beispiele verwenden das Python Modul Danny.OOo.OOoLib . Falls man das braucht: Das File findet man hier.
Um es zu benutzen muss man das File in einen Python-Pfad legen. Z.B nach C:\Python26\Danny\OOo . Der Ordner C:\Python26 wurde schon bei der Installation von Dreampie angelegt. Es muss den Ordner Danny im Verzeichnis C:\Python26 erstellt und in diesem zusätzlich den Ordner OOo . Dort legt man das OOoLib.py-File ab. Zusätzlich muss in beiden Ordnern noch ein leeres File mit dem Namen __init__.py angelegt werden.

Referenzen

Der Artikel hat von folgenden wichtigen Seiten profitiert:

Besten Dank

an Daniel Wildermuth, welcher mich auf die Idee gebracht hat mir das Generieren von LibreOffice-Calc Sheets per Python nochmals anzuschauen.

Linuxtreff am 19. April

Der Linuxtreff am 19. April wird nicht im Bierhof, sondern bei Marco Tedaldi in der Nähe vom Restaurant Gartenhaus stattfinden.

Strom, Internet und Getränke sind vorhanden. Ausserdem hat es eine kleinen Küche und auch einen Grill.

Libreoffice 3.3 ist fertig

Hallo Zusammen,
Libreoffice 3.3 ist fertig, wie zu erwarten vor dem Release von OpenOffice 3.3, dass ich nun schon im 10 Release Candidate befindet
zur Webseite

Libreoffice unter Ubuntu via ppa

Aufräumen
Für all jene die Libreoffice bereits direkt über die documentfoundation oder auf libreoffice.org heruntergeladen haben sollten zuerst aufräumen:

sudo apt-get --purge autoremove libreoffice*

Installation
Hier ist eine kleine Installationsanleitung, Ihr erhaltet den Writer, Calc und Impress in deutscher Sprache:

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice-l10n-de libreoffice-writer libreoffice-calc libreoffice-impress libreoffice-gnome

// Vereinfacht nach dem Tipp von Michael

HTC Desire HD, S-OFF (rooten)


Neuerdings ist es auch möglich ein HTC Desire HD auf die Weise zu rooten, dass man den Recoverymanager ersetzen kann um beliebige ROMS aufzuspielen, oder Backups zu erstellen.

Dominik Zogg hat sich ins Zeug gelegt und eine Anleitung zusammen gestellt, wie man ein HTC Desire HD dem entsprechend rootet.