Daten aus Calc in bestehende XML exportieren

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Daten aus Calc in bestehende XML exportieren

Re: Daten aus Calc in bestehende XML exportieren

von nel-son » Do, 04.08.2011 17:59

Hab das Schreiben in die xml gerade mal versucht, hat super geklappt. Das auslesen mit dem neuen Skript werde ich nochmal testen. Super Arbeit. Vielen Dank.

Re: Daten aus Calc in bestehende XML exportieren

von Karolus » Sa, 30.07.2011 21:47

Hallo
Hattest du Erfolg?
Ich hoffe doch sehr...

Code: Alles auswählen

# -*- coding: utf-8 -*-
import uno
import sys
import re


context = XSCRIPTCONTEXT
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance

doc = context.getDocument()             # Ausnahmsweise
selection = doc.getCurrentSelection()   # auf
timestamps = selection.getDataArray()   # Modulebene wg
lines = iter( timestamps )              # Iterator für next()→Siehe repl()
  


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


def repl( match ):
    try:
        a, b = map(timeformat, next(lines))
    except :
        a, b = match.group(2, 4) 
    return ''.join( [match.group(1), a, match.group(3), b, match.group(5)])

        

def timeformat( value ):
    m, s = divmod( value * 86400 , 60 )
    h, m = divmod( m, 60)
    return "{0:02.0f}:{1:02.0f}:{2:08.5f}".format( h, m, s )
    

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 )


def getfilename( flag=0 ):
    filepicker = createUnoService( "com.sun.star.ui.dialogs.FilePicker" )
    filepicker.initialize( ( flag,) )
    ok = filepicker.execute()
    if ok:
        return uno.fileUrlToSystemPath( filepicker.getFiles()[0] )
                        

def read_timestamps_out_xml( ):
    pfad = getfilename()
    if pfad:
        with open( pfad ) as timefile:
            alltext = timefile.read()
        timelist = [ elem.groups() for elem in read_rex.finditer( alltext )]
        makeDataArray( tuple(timelist))

        
    
def write_timestamps_to_xml():
    
    template = getfilename( 0 )
    if template:
        with open(template) as vorlage:
            xml = vorlage.read()
        with open( template , "w") as out:
            out.write( write_rex.sub( repl, xml ))

            

g_exportedScripts = read_timestamps_out_xml, write_timestamps_to_xml,
python.zip
(1.32 KiB) 48-mal heruntergeladen
Das ganze ist nochmal überarbeitet, für die Dateiauswahl gibts einen Dialog, beim Einlesen werden die Zeitstempel ab A1 ins erste Tabellenblatt geschrieben -
Zum Zurückschreiben der Daten markiere vorher den Datenbereich.

Gruß Karo
( !!! Erstelle dir vor dem Zurückschreiben zunächst mal Sicherungskopien der Ausgang-.xml sonst ist die Datei futsch - falls beim Schreiben etwas schiefläuft !!! )

Re: Daten aus Calc in bestehende XML exportieren

von nel-son » Fr, 29.07.2011 17:19

@ Karolus

Hattest du Erfolg?

Re: Daten aus Calc in bestehende XML exportieren

von Karolus » Fr, 22.07.2011 15:42

Hallo

Jou,
@Winfried: kannst du das gleich ans das Ausgangsthema 'drankleben' ?

@nelson: sollte machbar sein - etwas Geduld bitte.

Gruß karo

Re: Daten aus Calc in bestehende XML exportieren

von Eddy » Fr, 22.07.2011 15:33

Hallo,

warum fragst Du dann nicht wenigstens dieses mal im Basic-Forum?

Daten aus Calc in bestehende XML exportieren

von nel-son » Fr, 22.07.2011 15:07

Hallo,

ich beziehe mich auf diesen Beitrag hier viewtopic.php?f=2&t=48535

Das Python-Skript läuft jetzt sehr gut. Ich würde jetzt die geänderten Zeitangaben gerne wieder an die gleichen Stellen in die XML importieren. Alles andere soll so bleiben. Die Daten haben das gleiche Format (HH:MM:SS,XXX), es sind auch wieder genauso viele wie vorher, dass heißt jeder der Einträge

Code: Alles auswählen

<ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
<ChapterTimeEnd>00:02:01.121000000</ChapterTimeEnd>
bekommt auch wieder einen geänderten (oder auch ungeänderten, je nachdem obs nötig war) "zugeteilt".

Die ganzen Einträge für ChapterTimeStart liegen in der Spalte A (beginnend bei A1), die ganzen Einträge für ChapterTimeEnd liegen in der Spalte B, auch hier beginnend mit B1.

Ich denke das wird etwas schwieriger als Einträge aus einer XML zu importieren, oder?

Nach oben