tirsdag den 11. september 2018

Konvertering af (mange) csv-filer

Det er ingen hemmelighed at LibreOffice er noget af en schweizerkniv når det kommer til at konvertere dokumenter af enhver art. Gamle præsentationer fra Mac eller regneark fra Super Calc. LibreOffice klarer det med et snuptag. Det kan endda gøres med en kommandolinje, f.eks.

"C:\Program Files (x86)\LibreOffice\program\scalc.exe" --convert-to pdf  C:\Users\leil\Documents\test\testregneark.xlsx --outdir C:\Users\leil\Documents\test

Her konverteres et regnearksdokument til PDF.

Der skal ikke meget til for at lave en løkke, som rekursivt konverterer alle xlsx-filer i en bestemt folder.

Men...

Import af CSV-filer er lidt mere kompliceret.

Når du importerer en CSV-fil med LibreOffice ledes du altid igennem et skærmbillede, som ser nogenlunde sådan ud:



Hvis vi skal konvertere en mængde af (ens) CSV-filer skal vi i kommandolinjen udfylde skærmbilledet ved at anvende en parameter "-infilter" som er temmelig kompliceret at regne ud. Det er reelt umuligt at regne sig frem til, at det skal se sådan ud: --infilter="csv:59/44,34,12,1,1/4,0,false,true,true,false,false".

Der er en meget let måde at finde denne parameters værdi på. Det kræver en lille makro:

Sub showFilterOptions
Dim args(),i%
args() = thisComponent.getArgs
    for i = 0 to uBound(Args())
        if args(i).Name = "FilterOptions" then inputbox "","",args(i).value
    next
End Sub


Hvis du manuelt importerer en CSV-fil (og udfylder skærmbilleder korrekt), kan du umiddelbart efter køre denne makro. LibreOffice "husker" nemlig hvad du senest har importeret, og med denne makro får du oplyst hvad der er gemt.



Og import-kommandoen er derfor:

"C:\Program Files (x86)\LibreOffice\program\scalc.exe" --convert-to pdf --infilter="csv:59/44,34,12,1,1/4,0,false,true,true,false,false" C:\Users\leil\Documents\CSV\testdokument.csv --outdir C:\Users\leil\Documents\CSV