Search code examples
command-linelibreofficelibreoffice-calc

LibreOffice Command Line Convert CSV to DBF


I am working on a workflow where I need to be able to batch convert CSV files into DBF files. The data in the CSV files can all be output as TEXT fields and then saved as a DBF. I have tried to get any output possible using the command line in both Mac OS and Windows 7. While I was a little more successful in Windows, I was not able to get any conversion.

   "C:\Program Files (x86)\LibreOffice 5\program\scalc.exe" --convert-to dbf --

infilter="csv:44,34,76,1,1/2/2/2/3/2/4/2/5/2/6/2/7/2/8/2/9/2/10/2/11/2/12/2/13/2/14/2/15/2/16/2/17/2/18/2/19/2/20/2/21/2/22/2/23/2/24/2/25/2/26/2/27/2/28/2/29/2/30/2/31/2/32/2

/33/2/34/2/35/2/36/2/37/2/38/2/39/2/40/2/41/2/42/2/43/2/44/2/45/2/46/2/47/2/48/2/49/2/50/2/51/2/52/2/53/2/54/2/55/2/56/2/57/2/58/2/59/2/60/2/61/2/62/2/63/2/64/2/65/2/66/2/67/2

/68/2/69/2/70/2/71/2,0,false,false" C:\Users\jdavidson\Desktop\DBFCONVERT\*.csv --outdir C:\Users\jdavidson\desktop\complete

So, I needed to have an --infilter on the command line to be able to do the conversion, but now it will only process 1 file and not batch file when using *.csv So, my next hurdle is to get over that.

The below helps to explain --infilters in more detail:

https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options#Filter_Options_for_Lotus.2C_dBase_and_DIF_Filters

Any easier way to find the filter sequence you need is by following the below listed steps:

  1. Open the CSV Manually using LibreOffice and Specify Every Detail in the import Wizard
  2. Run the below macro and it will show you the filter options in an input box, so you can copy the string in to your own code

    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

Credit to code: https://forum.openoffice.org/en/forum/viewtopic.php?f=44&t=14018


Solution

  • The parameters need to be reversed. From https://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/:

    soffice --headless --convert-to <TargetFileExtension>:<NameOfFilter> file_to_convert.xxx

    Using the old windows command prompt:

    "C:\Program Files (x86)\LibreOffice 5\program\scalc.exe" --headless --convert-to dbf C:\Users\jdavidson\Desktop\DBFCONVERT\test.csv
    

    This will create test.dbf in the current directory, which is perhaps C:\Users\jdavidson or, if running as administrator, C:\Windows\system32. To print the working directory, enter pwd, and then dir to see the file.

    In powershell, add "& " in front to execute LibreOffice. Then enter gci or ls to see the file.

    Be sure that a LibreOffice process is not already running in the background.