Libre Office calc lesen und schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ikarus
User
Beiträge: 2
Registriert: Montag 11. November 2013, 01:46

Hallo liebe Python Freunde :)

Ich habe eine Libre Office calc Datei die ich fertig gestaltet habe.

Ich möchte diese Datei, nennen wir sie Test.odt, mit python bearbeiten.
Also die Zelle A1 lesen und in der Zelle B5 ein "hello world" schreiben.

Kann mir einer sagen wie ich das machen kann, vielleicht mit einem simplen Beispiel.

Vielen Dank
karolus
User
Beiträge: 145
Registriert: Samstag 22. August 2009, 22:34

Hallo

Das kannst du aus dem Script-kontext aus LO heraus lösen, Beispiele: http://de.openoffice.info/search.php?keywords=python
Dabei must du vor allem lernen mit der LO.API klarzukommen, hilfreich dabei ist die Erweiterung Mri die generiert dir sogar halbwegs brauchbaren Code beim Inspizieren der Objekte.

Unabhängig von LO gehts auch, schau dir dazu mal https://pypi.python.org/pypi/odfpy an.

Karolus
Ikarus
User
Beiträge: 2
Registriert: Montag 11. November 2013, 01:46

Danke für deine Antwort karolus :)

Ich habe mir UNO etwas angesehen
http://www.openoffice.org/de/doc/entwic ... uecke.html

leider finde ich kein Beispiel wo eine existierende odt Datei in python importiert wird und dann diese
editiert wird.
Ein einfach Beispiel dieser Art wo man dann noch Zellen lesen und schreiben kann würde für den Anfang helfen

kannst du mir da weiter helfen?
karolus
User
Beiträge: 145
Registriert: Samstag 22. August 2009, 22:34

Hallo

Um keine Begriffe durcheinander zu bringen - in Python kann man keine od*-dateien importieren


Du findest Beispiele im Programmordner von LO unter ./share/Scripts/Python

Hier noch etwas zusammengewürfeltes für calc

Code: Alles auswählen

context = XSCRIPTCONTEXT # globale Variable im sOffice-kontext


def example(): # funktioniert nur aus Calc 
    doc = context.getDocument() #aktuelles Document per Methodenaufruf ! mit Klammern !
    sheets = doc.Sheets # ! Attributaufruf ohne Klammern !
    firstsheet = sheets.getByIndex(0) # erstes Blatt per Index
    secondsheet = sheets.getByName('Tabelle2') # 'Tabelle2 per Namen
    
    firstsheet.geCellByPosition(0,0).Value = 3.14
    firstsheet.getCellRangeByName('B1').String = 'Hallo Welt'
    firstsheet.getCellByPosition(0,9).Formula = '=SUM(A1:A9)'    
    # ↓Das gleiche unten mit Lokalisiertem Funktionsnamen
    #firstsheet.getCellByPosition(0,9).FormulalaLocal = '=SUMME(A1:A9)'

    datarange = secondsheet.getCellRangeByPosition(0, 1, 3, 2) # A2:D3

    data = ((1, 2, 3, 4),
            (5, 6, 7, 8))
    
    datarange.setDataArray(data)
karolus
User
Beiträge: 145
Registriert: Samstag 22. August 2009, 22:34

Hallo

Die Zeile 10 oben muss natürlich lauten:

Code: Alles auswählen

    firstsheet.getCellByPosition(0,0).Value = 3.14

Karolus
Antworten