Es gibt schon etwas seltsame Situationen wie z.B. diese: Je nachdem welche/r Sachbearbeiter/in bei unserem Steuerberater den aktuellen Monat bucht die Belegliste entweder als *.csv- oder als *.xls-Datei vorliegen muss.

Als JTL-Anwender wird bei uns automatisch über die Ameise eine *.csv-Datei erzeugt. Eigentlich ist es kein Problem, diese mit Excel oder einem anderem Tabellenkalkulationsprogramm zu Öffnen und ggf. umzuwandeln, gemeint ist in einem anderen Format zu speichern. Scheinbar überfordert allerdings dieser Vorgang so manchen Anwender (ohne das dies nun negativ gemeint sein soll), und damit wir nicht diesen Vorgang händisch ausführen müssen kam der Wunsch auf, dies ebenso automatisch erledigen zu lassen wie das Erstellen der *.csv.

Eine kurze Recherche zu MS Excel lieferte imho eher abschreckende Ergebnisse. So ist das geplante Vorhaben beispielsweise nur via Macro oder VBA möglich, headless im Hintergrund auf einem Server anscheinend gar nicht (korrigiert mich, wenn ich mich irre).

Kurz weiter drüber nachgedacht, dämmerte mir, das bei OpenOffice ein Headless-Mode zur Verfügung steht. LibreOffice als Quasi-Nachfolger bietet diesen ebenso + eine weitere entscheidende Verbesserung.

Wie bei *.csv üblich, muss bei einer Umwandlung bzw. beim Öffnen schon angegeben werden, was als Trennzeichen zu verwenden ist. Das Gleiche gilt dann eben auch für den Aufruf via Skript.

Lange Rede, kurzer Sinn, der Befehl sieht in etwa so aus:

soffice --headless --convert-to xls --infilter="csv:59,34" <Quelldateiname>.csv

Die Syntax ist quasi selbsterklärend mit Ausnahme von “–infilter”, dieses legt fest was als Trennzeichen verwendet wird. Die Trennzeichen werden als Dezimalwert gemäss ASCII angegeben:

  • 59 entspricht dem Semikolon (Strichpunkt)
  • 34 ist ein Anführungszeichen

Zusätzlich kann man noch das Dateiformat wie z.B. UTF8 angeben, damit hatten wir allerdings das Problem, das Umlaute verloren gingen.

Quellen:

Apache OpenOffice – Forum – [Basic] Convert ods to csv via commandline

LibreOffice – Help – Starting the LibreOffice Software With Parameters

LibreOffice – Ask – Convert-to from csv to ods and viceversa (die eigentliche Quelle von infilter mit ASCII)