ods Dateien auslesen/schreiben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen!

    Ich versuche gerade etwas mehr Ordnung und Übersicht in mein Programm zu bringen.
    Dafür würde ich gerne eine Tabelle in Libreoffice verwenden.

    Gibt es eine Möglichkeit, die einzelnen Felder mit Python auszulesen bzw. zu schreiben?

    Hab mich jetzt schon etwas durch den Web-Dschungel gekämpft, jedoch noch keinen eindeutigen Treffer gelandet :neutral:.
    Vllt kann mir ja jemand einen Hinweis geben, wo ich fündig werden könnte.

    Vielen Dank schonmal!

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

    Einmal editiert, zuletzt von LieberScholli (21. Januar 2014 um 14:37)

  • Also ich habe eine Tabelle mit verschiedenen Werten.
    In einem Fall sind das z.B. Angaben zu verschiedenen Audiofiles.
    "Name", "Dateiname", "Länge"

    Bisher habe ich diese Informationen als Tupel gespeichert und zu meiner besseren Übersicht händisch in eine Tabelle übertragen. Langsam werden das aber recht viele Files und mit meinem eigenem Editor recht schwierig zu bearbeiten.

    Durch das "auslagern" in eine Tabelle wäre ich mit wenigen Klicks in der Lage, kleine Veränderungen vorzunehmen, bzw. ganze Audiobanks auszutauschen (Verschiedene Sprachen/Stimmen).

    Also eigentlich einfach nur ein bestimmtes Feld aus einer Tabelle auslesen.
    Z.B. "Read (A)(1)" aus Tabelle XYZ

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

  • Okay, schonmal heißen Dank für die Links!
    Schaue mir das mal an.

    Zitat


    Vielleicht wärs sinnvoller auf SQLite oder MySQL umzusatteln

    Vermutlich hast Du da recht. Hab damit aber noch keine Erfahrungen sammeln können.
    Kommt aber auf jedenfall als Lösung in frage.
    Suche halt grade nach einer komfortablen und unkomplizierten Lösung für mein Problem.
    Werde das auch mal ins Auge fassen. Danke!

    Okay, läuft.
    Hiermit hats geklappt:
    https://pypi.python.org/pypi/odfpy

    Einige Links (die ich auch schon hatte) waren leider nicht mehr zu erreichen.
    Jetzt gehts ans einfügen in mein Prog...

    :danke_ATDE: für die blitzschnelle Hilfe!!!! :thumbs1:

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

    Einmal editiert, zuletzt von LieberScholli (21. Januar 2014 um 16:10)

  • So, jetzt kämpfe ich mich seit gestern durch die ganzen Module,
    der Raspi ist vollgepackt mit unnötigem Zeugs und ich komme aber keinen Schritt weiter.
    Deshalb nochmal meine Frage:

    Wie lese ich Werte aus einer OO-Tabelle???

    Ich möchte keine Tabelle erstellen, kein Textdokument, keine Präsentation, nix dergleichen.
    Lediglich einen Wert (bzw. Text) aus einer Tabelle auslesen.

    Bitte keine weiteren Googlelinks, das kann ich schon selber und dafür brauche ich kein Forum :X.
    Würde mich vielmehr über einen simplen Programmschnipsel freuen, der auch funktioniert.
    Kann doch nicht so schwer sein...:s

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

    Einmal editiert, zuletzt von LieberScholli (22. Januar 2014 um 23:09)

  • Bitte keine weiteren Googlelinks, das kann ich schon selber und dafür brauche ich kein Forum :X.

    Geschätzte 90% können das aber leider nicht, oder nicht richtig - deshalb ist es leider bequemer in irgendwelchen Foren zu fragen.... So wie es hier jetzt imho auch der Fall ist

    Also auch wenn du mit solch einer Aussage hier den Helfern vor den Kopf stößt, helfe ich dir jetzt trotzdem noch mal zu googlen: http://bit.ly/1aMmyHK

    http://stuvel.eu/ooo-python
    http://forum.ubuntuusers.de/topic/python-w…s-ods-tabellen/
    http://stefaanlippens.net/opendocumentpython

  • Nun, wenn Du Dich damit vor den Kopf gestoßen fühlst, tut mir das leid. Aber lmgtfy ist ja auch nicht besser. Dann bräuchte man kein Forum, denn es steht ja alles in diesem tollem Google.

    Ich hatte mir eher erhofft, das sich vllt. jemand damit schonmal näher befasst hat und mir konkrete Tipps geben kann. Schließlich ist dieses Forum ja ebenfalls in diesem Google drinne und man könnte sich mit klaren Lösungsansätzen vllt. eher einem Ergebnis nähern. Jedoch durfte ich in so manchen Foren genau das lesen, was hier gerade passiert.

    Dass ich mich noch weiter damit beschäftigen muss ist mir klar. Eine fertige Lösung wird mir auch keiner liefern können, da ich das eh' noch auf meine Bedürfnisse anpassen muss. Sicher werde ich früher oder später auch nicht an MySql etc. vorbeikommen.

    Jetzt möchte ich jedoch lediglich eine Zelle auslesen und mich nicht mit dem erstellen einer Komplexen Tabelle über Python beschäftigen.

    Wären die Links wirklich hilfreich gewesen, hätte ich sowas ja nicht geschrieben, aber einige Downloads bzw. die dazugehörigen Abhängigkeiten haben entweder gefehlt bzw. wurden nicht weiter erklärt. Und das sagt mir, das einfach blind die Google Links kopiert wurden.

    Naja, bin ja schon ein kleines Stück weiter.
    Sry, das ich keine Ambi-Frage hab. Das wird ja hier offensichtlich stärker supported.:^^:

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

    Einmal editiert, zuletzt von LieberScholli (23. Januar 2014 um 02:27)

    • Offizieller Beitrag

    Naja, wer Randgruppen Software(OO) innerhalb von Randgruppen Software(Linux) einsetzt muss damit Rechnen das sein Problem eventuell nicht so oft vorkommt. Für Excel hätte ich sofort Codeschnipsel, so werde ich gleich mal die Modul Dokumentation für dich lesen.

  • In den vorherigen Links waren eigentlich schon Denkanstöße enthalten, um was für Dateien es sich bei *.ods handelt usw

    In den von mir zuletzt genannten Links steht dies nun noch genauer drin, sogar mit den von dir erwarteten Python Code Beispielen - da wird sogar ganz genau erklärt wie man was, speziell mit Python und OO, erreichen kann, bis ins kleinste fitzelchen wird da erklärt...

    Der lmgtfy Link diente dazu aufzuzeigen mit welchen Suchbegriffen ich innerhalb kürzester Zeit zum gewünschten Ergebnis gelangt bin


    Wenn dir selbst das jetzt noch immer nicht reicht verstehe ich langsam nicht mehr was Du eigentlich genau erwartest???

    • Offizieller Beitrag

    Also die Doku von deinem erwählten Modul ist ja wohl mal übel, 156 Seiten und kaum Inhalt, ganz zu Schweigen von der Umsetzung. Das ist nicht der python Weg. Ich empfehle,wie bereits erwähnt,ezodf.

    Code
    ods = newdoc(doctype='ods', filename='spreadsheet.ods')
    sheet = Sheet('SHEET', size=(10, 10))
    ods.sheets += sheet
    sheet['A1'].set_value("cell with text")
    sheet['B2'].set_value(3.141592)
    sheet['C3'].set_value(100, currency='USD')
    sheet['D4'].formula = "of:=SUM([.B2];[.C3])"
    pi = sheet[1, 1].value
    ods.save()

    anstelle von newDoc müsstest du dann opendoc nehmen

    Code
    ods = ezodf.opendoc(FILENAME)
  • 156 Seiten? Welche Doku?

    1. Link: Sehr ausführliche Beschreibung
    2. Link: Forum Beitrag in dem genau das selbe wie hier erfragt wurde (mit Lösungsvorschlägen)
    3. Link: Lösung in Python (mehr als kurz)

    • Offizieller Beitrag

    Ging nicht an dich meigrafd ;) sondern an LieberScholli und sein erwähltes modul odfpy (was absolut overpowered ist, für seine zwecke). Hier ist mal die Doku dazu, wer damit klar kommt....meinen Herzlichen Glückwunsch :)

    Ich kam fast zu den gleichen Treffern...wir wollen hier aber nicht über richtiges googlen diskutieren.

  • Erst nochmal herzlichen Dank für die Hilfe, aber komme beim auslesen trotzdem noch keinen Schritt weiter.
    Hab mich heute bis 8 Uhr mit dem erstellen einer ods-Datei beschäftigt und bin sogar zu einer Lösung gekommen.

    Soweit, so einfach.

    Nun ging es ans auslesen. Hiermit kam ich auch erstmal voran, bis sich eine Kleinigkeit zu einem großem Problem entwickelt hat.
    Die Informationen werden Zeilenweise ausgelesen, mit dem Nachteil das leere Zellen einfach ausgelassen werden.
    Wenn ich also z.B. die 5. Zeile aus der 1. Reihe auslesen möchte und dazwischen eine leere Zelle ist, bekomme ich statt der 5. Zeile die 6. Zeile als Ausgabe.

    So, also erstmal in die Poofe gehauen und nach nem Nickerchen wieder frisch ans Werk.
    Glücklicherweise habt Ihr mir ja weitere Anregungen gegeben, womit ich sofort angefangen hab die abzuarbeiten.

    Nach ein paar Versuchen und runterladen von unzähligen Paketen hänge ich bei jedem Versuch an folgendem:
    Das lxml Modul lässt sich einfach nicht installieren. Nach dem Start mit python setup.py install bekomme ich eine Fehlermeldung:


    Wenn ich mir so meinen Browserverlauf und die besuchten Webseiten so ansehe, scheint es mir einfacher, ich mache ein Foto von der Tabelle und lese die Zellen mithilfe eines Texterkennungsprogramms aus :D.

    Ich möchte doch nur "READ(ZEILE,SPALTE)"...=( und nicht gleich Raketenwissenschaftler werden...:-/

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

  • ...Ich wiederhol das jetzt nur noch ein mal... Wenn es dann immer noch nicht verstanden wird muss man annehmen das du einfach nicht willst...

    *.ods Dateien sind einfach nur Zip Dateien, nur mit einer anderen Dateiendung (anstatt *.zip -> *.ods)

    In diesem Zip sind größtenteils XML Dateien drin: content.xml, settings.xml und styles.xml

    Du benötigst also nur 2 Dinge:

    • etwas um die Datei zu entpacken
    • etwas zum verarbeiten (parsen) der xml Zeilen

    Das wird in den von mir zuletzt genannten Links aber ausführlich beschrieben ...

  • Warum denn gleich so grantig?:s
    Mag ja sein, dass Du das leicht verstehst.
    Meine letzten Programmiererfahrungen sind 25Jahre her und hab erst seit 2Mon. den spass am Programmieren wiederentdeckt...

    /edit: Scheint zu funktionieren. Jetzt muss ich nur noch zusehen, dass ich das ganze auch verstehe.
    Hoffentlich geht der anders mit Leerzellen um.
    Ist es denn so schwer nachzuvollziehen, dass man nach etlichen Fehlversuchen den Überblick verliert???
    Naja, bin ja gut erzogen, also danke!

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

    Einmal editiert, zuletzt von LieberScholli (23. Januar 2014 um 18:45)

  • Wer mir jetzt noch sagen kann, wie ich diesen Datensatz gezielt auslesen kann, dem wäre ich wirklich dankbar.
    Also speziell eine einzelne Zelle(Zeile,Spalte) ansprechen, bzw. auslesen.

    Ansonsten ist das Thema für mich gegessen und ich such mal nach einer anderen Lösung.
    Keine Lust, mich für so eine einfache Funktion durch Seitenweise Dok zu ackern.
    Ich dachte das würde ähnlich wie z.B. Zelle[Zeile][Spalte] funktionieren.
    Die Ausgabe (das Tupel), die ich mit meigrafds Link bekomme ist für mich als Anfänger halt schwer zu durchschauen.
    Vllt. hab ich mir das etwas zu einfach vorgestellt (ist es aber wahrscheinlich auch).


    Kleines Update:
    Hab es jetzt geschafft, das Tupel auseinander zu pflücken, habe hier aber wieder das gleiche Problem mit den leeren Zellen.
    Ähnliche Schwierigkeiten ergeben sich auch, wenn 2 gleiche Zellen nebeneinander liegen (Name = Dateiname in meinem Fall).
    Das ließe sich zwar durch Platzhalter, bzw. Großbuchstaben beim Namen leicht umgehen, ist aber äußerst unfein, da ich die kleinste Bank auf die Länge der längsten Bank verlängern müsste (oder absteigend sortieren, was aber nicht wirklich praktikabel ist).

    Nochmal eine Zusammenfassung:
    Ich habe einige Tupel, welche ich mit Pickle in einer Datei speichere. Diese Tupel werden beim Programmstart geladen.
    Eines dieser Tupel sieht etwa so aus (sind im Grunde nur Verweise, mit denen mein Programm arbeitet):
    audio[0] = Anzahl der Audiobanks
    audio[1][0] = Anzahl der Audiofiles in Bank (hier 1)
    audio[1][1][0] = Name des Audiofiles aus Bank 1 / File 1 (eigentlich nicht benutzt, dient nur meiner Orientierung)
    audio[1][1][1] = Dateiname (Dateipfad ergibt sich aus der Bank. Die Files sind in durchnummerierten Ordnern abgelegt)
    audio[1][1][2] = Länge des Audiofiles (um Zahlen, bzw. Sätze störungsfrei zusammen zu setzen)

    Um dieses Tupel zu erstellen, habe ich einen kleinen Editor geschrieben, womit ich neue Files anhängen, bzw. die Länge optimieren kann.
    So, dieses Tupel habe ich vorerst händisch, mittlerweile (erfolgreich, juhu!) mit einem kleinem Programm in eine OO-Tabelle übertragen.
    Diese Tabelle sieht in etwa so aus:

    _Anzahl Banks_____|____________________________________________________________...
    _Anzahl Files Bank1_|________|__________||_Anzahl Files Bank2__|________|__________|_...
    _Name1___________|_Datei1__|__Länge1__||_Name1___________|_Datei1__|__Länge1__|_...
    _Name2___________|_Datei2__|__Länge2__||_Name2___________|_Datei2__|__Länge2__|_...
    .
    .
    Die Anzahl der Banks/Files sind eigentlich nur aus der Not und Unwissenheit entstanden und könnten auch durch Endmarkierungen ersetzt werden. Würde aber eigentlich gerne dabei bleiben, da das irgendwie schon praktisch ist (zumal über Datei1 und Länge1 noch Platz für weitere Informationen bereitsteht).

    Zum Zwecke der besseren Übersicht und der Möglichkeit diese Tupel einfach zu verändern würde ich jetzt gerne ein Programm schreiben, welches mir diese Tabelle ausliest, wieder in Tupel verwandelt und in die Datei schreibt, die von meinem Programm ausgelesen wird. Das stellt mich auch erstmal vor keine große Herausforderung.
    Einzig das Auslesen dieser Tabelle bereitet mir gerade enorme Schwierigkeiten.

    Ich würde mir eine Möglichkeit wünschen, womit ich problemlos auf die Zelle A1, G5, etc. zugreifen könnte.
    Leider bin ich grade dabei Python zu lernen und zu verstehen und kann noch nicht auf alle Möglichkeiten zurückgreifen. Die Bücher gehen leider auch nicht konkret auf mein spezielles Problem ein. Mein letztes Programm habe ich auf einem Amiga500 geschrieben und bin äußerst überrascht, wie einfach es mir fiel auf meine alten 'skills' zurückzugreifen und diese auf Python zu übertragen. Wie dbv schon in einem anderem Post zu mir schrieb, ist es wirklich klasse, welche Module es alles gibt. Leider bin ich mit der Syntax noch nicht 100% konform. Wer also noch eine tolle Lektüre für mich hätte kann mir das bitte gerne mitteilen (kann ja nicht alle auf einmal kaufen und durchackern). Zunächst bin ich aber schonmal sehr stolz auf mein selbsterstelltes Programm mit Sprachausgabe, Minigames, Radio und erweiterbaren Funktionen, welches ich mir in in den 2 Monaten ausgedacht habe, seit ich diesen knuddeligen Pi habe...:thumbs1:

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

    Einmal editiert, zuletzt von LieberScholli (24. Januar 2014 um 04:56)

  • Eventuell einfach als CSV-Datei speichern? Leicht auszulesen in Python, trotzdem editierbar in OO. Geht natürlich nicht wenn du Formeln, bunte Schrift oder sonstwas in deiner Datei hast.

    Bevor du fragst: CSV = Comma seperated value. Sieht etwa so aus:

    Code
    Zelleninhalt;andereZelle;noch mehr;bla bla
    nächste Zeile;Zelle 1/1;test

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!