Daten aus Calc in bestehende XML exportieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

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

Daten aus Calc in bestehende XML exportieren

Beitrag von nel-son »

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?
Eddy
********
Beiträge: 2781
Registriert: So, 02.10.2005 10:14

Re: Daten aus Calc in bestehende XML exportieren

Beitrag von Eddy »

Hallo,

warum fragst Du dann nicht wenigstens dieses mal im Basic-Forum?
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Daten aus Calc in bestehende XML exportieren

Beitrag von Karolus »

Hallo

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

@nelson: sollte machbar sein - etwas Geduld bitte.

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: Daten aus Calc in bestehende XML exportieren

Beitrag von nel-son »

@ Karolus

Hattest du Erfolg?
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Daten aus Calc in bestehende XML exportieren

Beitrag von Karolus »

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) 47-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 !!! )
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: Daten aus Calc in bestehende XML exportieren

Beitrag von nel-son »

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.
Antworten