Массовая конвертация XLS в CSV


... А можно и обратно так же легко и непринужденно.

Для этого нужен просто OpenOffice и функция в модуле шаблона:


find / -name '*.xls' -exec echo soffice -invisible "\"macro:///Standard.Module1.SaveAsCSV($pwd/{})\"" \;

' RunAS soffice -invisible "macro:///Standard.Module1.SaveAsCSV(c:\sample.xls)"
Sub SaveAsCSV( cFile )
   
  Dim oDoc as Object
   
  cURL = ConvertToURL( cFile )

  ' Open file
  Dim oarg(1) As New com.sun.star.beans.PropertyValue
  oarg(0).Name = "FilterName"
  'oarg(0).Value = "Text - txt - csv (StarCalc)"
  oarg(0).Value = "MS Excel 97"
  'oarg(1).Name = "FilterOptions"
  'oarg(1).Value = "9,34,76,1" 
  'oarg(2).Name = "Hidden"
  'oarg(2).Value =  True
  Set oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, oarg)

  ' Generate file name
  cFile = Left( cFile, Len( cFile ) - 4 ) + ".csv"
  cURL = ConvertToURL( cFile )

  ' Save the document using a filter.
  Dim args(1) as New com.sun.star.beans.PropertyValue
   
  args(0).Name = "FilterName"
  args(0).Value = "Text - txt - csv (StarCalc)"
  args(1).Name = "FilterOptions"
  args(1).Value = "44,34,76,1,,0"

  oDoc.storeToURL( cURL, args )

  oDoc.Close( True )
End Sub

В принципе всё то же самое можно сделать из консоли в одну строку:

libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)":44,34,76 --outdir ../ *.xlsx