CV-Werte der Lokdecoder aus iTrain in LibreOffice Calc importieren

Im iTrain-Forum hat ein Modellbahnfreund eine Excel-Lösung für das Importieren von CV-Werten aus iTrain vorgestellt. Eine gute Idee angesichts der Tatsache, dass iTrain selbst beim CSV-Export die Decodereinstellungen außen vor läßt. Da bei solchen Aufgaben die Kompatibilität zwischen MS Office und LibreOffice gegen Null geht, bleibt die Lösung nur Excel-Nutzern vorbehalten. Es musste also eine Lösung für den nicht unerheblichen Rest her.

Voraussetzungen

Die iTrain-Datei darf nicht im zip-Format vorliegen. Entweder Ihr entpackt die tcd-Datei von Hand oder Ihr speichert sie aus iTrain heraus unkomprimiert ab.

Da die in LibreOffice enthaltenen XML-Filter mit dem iTrain-Format nicht umgehen können, musste ein eigens für diesen Zweck geschriebener her. Die Anweisungen, wie die Daten aus iTrain ausgelesen und in Calc importiert werden, stehen in einer XSLT-Datei. Ladet Euch diesen Filter hier herunter und speichert ihn an einem Ort Eurer Wahl.

Eine Möglichkeit, wie man auch mit den komprimierten iTrain-Dateien (tcdz) arbeiten kann, hab ich hier vorgestellt.

Vorgehensweise

Dieser Filter muss jetzt in LibreOffice integriert werden.

Datenimport von Hand

Öffnet LibreOffice und geht auf das Menü Datei Öffnen. Im sich öffnenden Dialogfeld stellt Ihr das Dateiformat von Alle Dateien auf iTrain-Lokdekoder um.

Die Liste kann unter Umständen sehr lang sein. Dann wählt Ihr Eure iTrain-tcd-Datei aus und klickt auf Öffnen.

Datenimport per Makro

Ihr könnt Euch auch ein Makro für den Datenimport anlegen. Das Makro könnte folgenden Code enthalten:

sub iTrain_Lokdecoder_import
rem ----------------------------------------------------------------------
rem Variablen definieren
dim oDlg As Object ,oDoc As Object, sPath As String
rem Rückgabewerte des Datei-Öffnen-Dialogs
dim DateiListe() 
rem Eigenschaften für loadComponentFromURL setzen
dim properties(0) as new com.sun.star.beans.PropertyValue
properties(0).Name = "FilterName"
rem der Name des Filters so wie er in Calc eingetragen ist
properties(0).Value = "iTrain Lokdecoder"
rem Dialog zum öffnen der Datei initialisieren
dim MyFilterListe(0) As New com.sun.star.beans.StringPair
rem Filterliste füllen
MyFilterListe(0).first="iTrain Layouts"
MyFilterListe(0).second="*.tcd"
rem Pfad setzen
sPath=ConvertToUrl("/home/uwe/iTrain/layouts")
rem ######################################################
rem für Windows z.B.:
rem sPath=ConvertToUrl("C:\iTrain\layouts")
rem ######################################################
rem Dialog anzeigen
oDlg=createUnoService("com.sun.star.ui.dialogs.FilePicker")
With oDlg
	.setMultiSelectionMode(false)
	.appendFilter("Alle Dateien", "*.*")
	.appendFilterGroup("iTrain", MyFilterListe())
	.setDisplayDirectory(sPath)
	.setCurrentFilter("iTrain Layouts")
	.setTitle("iTrain Lokdecoder importieren")
End with
oDlg.execute
rem Datei öffnen
DateiListe=oDlg.getFiles()
doc = StarDesktop.loadComponentFromURL(DateiListe(0), "_blank", 0, properties())
end sub

Der Vorteil der Makrolösung liegt darin, dass der Datei-Öffnen-Dialog gleich den richtigen Dateifilter enthält und Ihr Euch gleich im richtigen Verzeichnis zur Dateiauswahl befindet.

Wie Ihr das Makro in Menüs oder Symbolleisten einbindet könnt Ihr hier nachlesen.

Die fertige Tabelle kann dann so aussehen: