Seite 1 von 2

bestimmte Daten einer xml in Calc importieren

Verfasst: Sa, 21.05.2011 15:12
von nel-son
Hallo,

ich würde gerne Daten aus einer xml in Calc einfügen. u.a enthält die xml folgende Daten:

Code: Alles auswählen

<ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
<ChapterTimeEnd>00:02:01.121000000</ChapterTimeEnd>
Der ganze Rets inst uninteressant. Jede Startzeit soll in eine Zelle und jede Ende-Zeit in eine eingefügt werden. De Start- und Ende-Zeiten stehen immer zusammen und sollen in eien Zeile eingefügt werden. Die Zeiten weiter unten in der xml in die entsprechend nächste Tabellenspalte. Einfaches öffnen öffnet die xml im Writer.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Sa, 21.05.2011 18:34
von Karolus
Hallo
Die Frage gehört eher ins Basic Forum.
Hier mal eine schnelle Lösung mit python:

Code: Alles auswählen

import uno
import sys
import re

context = XSCRIPTCONTEXT
pfad = "/hier/steht/der/pfad/zu/deinem.xml"

def makeDataArray( olist):
    size = len( olist ) -1
    oDoc= context.getDocument()
    oSheet = oDoc.Sheets.getByIndex(0)
    oRange = oSheet.getCellRangeByPosition(0, 0, size , 0)
    oRange.setFormulaArray( (olist ,))


rex = re.compile("""<ChapterTime(?:Start|End)>(\d{2}:\d{2}:\d{2}\.\d{9})</ChapterTime(?:Start|End)>""")
                 
def catchtimes( ):
    with open( pfad ) as timefile:
        alltext = timefile.read()
    timelist = rex.findall( alltext )
    makeDataArray( tuple(timelist))

def maketestArray():
    oDoc= context.getDocument()
    oSheet = oDoc.Sheets.getByIndex(0)
    oRange = oSheet.getCellRangeByName("A1:C3")
    oRange.setDataArray(((1, 2, 3),(4, 5, 6),('Hello' ,'to', 'you'),))

g_exportedScripts = catchtimes, 
python.zip
(770 Bytes) 75-mal heruntergeladen
Entpacke "python.zip" in dein OOo-benutzerverzichniss in den Ordner "Scripts" schreib deinen Pfad zur .xml-datei an die entsprechende Stelle des Pythonscripts ( speichern nicht vergessen! ) , und führe aus einem neuen Calcdokument heraus aus:
→Extras→ Makros → Makros ausführen → Meine Makros → timecatcher →catchtimes

Gruß Karo

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: So, 29.05.2011 13:35
von nel-son
Ich finde unter Win7 das Benutzerverzeichnis nicht. Nirgendwo im netz finde ich irgendwas dazu, nur zu XP und Vista. UNter ProgramData gibts nchts zu OpenOffice.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Mo, 30.05.2011 16:59
von nel-son
Weder finde ich unter dem Pfad etwas Richtung OpenOffice, noch wird mir unter Optionen ein Pfad zum Benutzerverzeichnis angezeigt. Ich sehe alles mögliche an Verzeichnissen (z. B. Arbeitsverzeichnis), aber kein Benutzerverzeichnis.

Ich habe keine portable drauf.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Mo, 30.05.2011 17:35
von Karolus
Hallo
Es gibt fünf Pfade die bis zum zweituntersten Verzeichnis gleich sind, nimm einen von denen gehe eine Verzeichnisebene nach oben und such den Ordner 'Scripts'.

Gruß Karo

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Di, 31.05.2011 17:16
von nel-son
Ich dachte das Benutzerverzeichnis ist direkt in OpenOffice angegeben, habs jetzt gefunden.

Kann man das Skript so anpassen, dass immer die Start und die Ende-Zeit nebeeinander stehen und die entsprechend nächsten Start- udn Endezeiten eine Spalte tiefer? Also A1+B1, dann A2+B2, dann A3+A3.

Ich hatte Probleme beim importieren, wenn im Pfad Ordner drin waren. "d:\neu\name.xml" hat nicht funktioniert, aber "d:\name.xml" klappte. Hab mal einen Screenshot der Fehlermeldung angehangen.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Mi, 01.06.2011 09:32
von Karolus
Hallo
Ersetze den Inhalt von timecatcher.py durch:

Code: Alles auswählen

import uno
import re

context = XSCRIPTCONTEXT
pfad = r"/hier/steht/der/pfad/zu/deinem.xml"

def makeDataArray( olist):
    rowsize = len( olist ) -1
    colsize = len( olist[0] )-1
    oDoc= context.getDocument()
    oSheet = oDoc.Sheets.getByIndex(0)
    oRange = oSheet.getCellRangeByPosition(0, 0, colsize , rowsize)
    oRange.setFormulaArray( olist )

tags = [ "ChapterTime", "Start", "End", "(\d{2}:\d{2}:\d{2}\.\d{9})" ]
rex = re.compile( """<{0}{1}>{3}</{0}{1}>.*?<{0}{2}>{3}</{0}{2}>""".format(*tags),  re.S)

                 
def catchtimes( ):
    with open( pfad ) as timefile:
        alltext = timefile.read()
    timelist = [ elem.groups() for elem in rex.finditer( alltext )]
    makeDataArray( tuple(timelist))


g_exportedScripts = catchtimes, 
Mit dem 'r' vor der Pfadangabe dürfte es auch keine Probleme mit '\n' im Pfad geben.

Gruß Karo

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Sa, 04.06.2011 14:12
von nel-son
Jetzt steh ich komplett auf dem Schlauch, jetzt geht gar nichts mehr weder mit dem ersten noch mit dem Zweiten Skript. Ich hab das vielleicht ein Dutzend mal versucht, mit verschiedenen Dateien, alle Möglichen Skript- und Pfad-Kombinationen. Hab alles x-mal auf Schreibfehler überprüft. Geht einfach nicht mehr. 1x hab ich eine xml direkt aus "D:" importieren können, dann nicht mehr. Es komt immer wieder die oben genannte Fehlermeldung.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Sa, 04.06.2011 16:55
von Karolus
Hallo
Ich hab das jetzt nochmal auf Windows getestet, und es funktioniert auch dort mit Pfadangaben in der Form:
r"C:///dein/pfad/zur/datei.xml"
Backslashes als Pfadtrenner sind offenbar nicht erforderlich!
Ich häng dir nochmal den gezipten Python-ordner an.

Gruß Karo

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Sa, 04.06.2011 18:24
von nel-son
Sorry, geht nicht.

Was meist du denn mit Backslash? Ich habs mit / und \ versucht, auch mit mehreren davon hinter dem Buchstaben (du hast da 3 gesetzt, ist das ein Schreibfehler?).

Macht es einen Unterschied ob ich die *.py in D: entpacke, ändere, speichere und in den Ordner python kopiere oder ob ich das Archiv in Scripts kopiere und dort entpacke? Ich hab beides versucht.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: Sa, 04.06.2011 20:41
von Karolus
Hallo
Backslash → \
Slash → /
3 Slash hinter dem Lauwerksbuchstaben sind kein Schreibfehler, zumindest hier hat das funktioniert.
Macht es einen Unterschied ob ich die *.py in D: entpacke, ändere, speichere und in den Ordner python kopiere oder ob ich das Archiv in Scripts kopiere und dort entpacke? Ich hab beides versucht.
Nein, macht im Prinzip keinen Unterschied, hinterher muss nur eine Ordnerstruktur ...Scripts → python → timecatcher.py existieren.
Du kannst das Script über "→ Extras → Makros → Makros verwalten → Python" finden und ausführen ?
Wenn ja, ist der Teil doch in Ordnung - Scripts mit Syntaxfehlern werden in der Regel gar nicht zur Auswahl angeboten.
Bleiben eigentlich nur Probleme mit dem Pfad zur ...xml - da hat die erste Vesion aber auch schon mal funktioniert ?!

Gruß Karo

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: So, 12.06.2011 17:54
von nel-son
Ich gebs auf, geht einfach nicht. Ich hab den Pfad 100.000mal überprüft, de rist absolut i.O. Auch alles andere ist i.O. keine Fehler, Skript wird einfach nicht ausgeführt, obwohl es unter Makro zu finden ist.

Wie müsste denn der Pfad korrekt aufgebaut sein, wenn eine xml unter D:\neu\neu.xml liegt? Ich hab alles nur erdenklichen Varianten mit "///", "//", "/", "\\\", "\\" und so weiter versucht. Alle Skripte wurden angezeigt, funktionierten aber nicht. Hab ich verschiedene xml-Dateien versucht. Alles ohne Erfolg.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: So, 12.06.2011 19:14
von Karolus
Hallo
Wie müsste denn der Pfad korrekt aufgebaut sein, wenn eine xml unter D:\neu\neu.xml liegt?
Einfach:
pfad = "D:///neu/neu.xml"

Wenn bei dir das Script aufrufbar ist ( aus einem Calcdokument ! ) ... kommt wenigstens eine Fehlermeldung ...welche?

Gruß Karo

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: So, 19.06.2011 10:33
von nel-son
Alle Skripte wurden unter Markos aufgeführt und waren ausführbar, aber bis auf 1x hat keines funktioniert. Ichhab dir nochmal die Fehlermeldung hochgeladen. Auch der Pfad passt.

Wie gesagt, ich gebs auf. Ich danke dir trotzdem für deine Mühen.

Re: bestimmte Daten einer xml in Calc importieren

Verfasst: So, 19.06.2011 17:58
von Karolus
Hallo
Die Fehlermeldung besagt letzendlich das Suchmuster..., (nach deinen Angaben :

Code: Alles auswählen

<ChapterTimeStart>00:00:00.000000000</ChapterTimeStart> ....
<ChapterTimeEnd>00:02:01.121000000</ChapterTimeEnd>
...wird in deiner Datei nicht gefunden.
Ich kann hier auch nicht mehr machen als eine dummy.xml nach deinen Angaben zusammenbauen und mit der testen...hier funktionierts :?
was ist Bei deinen Zeitstempeln anders ?
- hast du konkret 9 Kommastellen hinter den Sekunden ?
- hast du evtl. Komma statt Punkt als Dezimaltrenner. ?
_ ?
Gruß Karo