bestimmte Daten einer xml in Calc importieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Dateianhänge
skript.jpg
skript.jpg (101.98 KiB) 2533 mal betrachtet
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
Dateianhänge
python.zip
(773 Bytes) 69-mal heruntergeladen
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
nel-son
**
Beiträge: 31
Registriert: Sa, 21.05.2011 13:23

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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.
Dateianhänge
ooo.jpg
ooo.jpg (116.9 KiB) 979 mal betrachtet
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: bestimmte Daten einer xml in Calc importieren

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten