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,
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 !!! )