Convert XLS to CSV on command line

后端 未结 15 2238
臣服心动
臣服心动 2020-11-22 12:11

How could I convert an XLS file to a CSV file on the windows command line.

The machine has Microsoft Office 2000 installed. I\'m open to installing OpenOffice if it\

15条回答
  •  温柔的废话
    2020-11-22 12:49

    All of these answers helped me construct the following script which will automatically convert XLS* files to CSV and vice versa, by dropping one or more files on the script (or via command line). Apologies for the janky formatting.

    ' https://stackoverflow.com/questions/1858195/convert-xls-to-csv-on-command-line
    ' https://gist.github.com/tonyerskine/77250575b166bec997f33a679a0dfbe4
    
    ' https://stackoverflow.com/a/36804963/1037948
    '* Global Settings and Variables
    Set args = Wscript.Arguments
    
    For Each sFilename In args
        iErr = ConvertExcelFormat(sFilename)
        ' 0 for normal success
        ' 404 for file not found
        ' 10 for file skipped (or user abort if script returns 10)
    Next
    
    WScript.Quit(0)
    
    Function ConvertExcelFormat(srcFile)
    
        if IsEmpty(srcFile) OR srcFile = "" Then
            WScript.Echo "Error! Please specify at least one source path. Usage: " & WScript.ScriptName & " SourcePath.xls*|csv"
            ConvertExcelFormat = -1
            Exit Function
            'Wscript.Quit
        End If
    
        Set objFSO = CreateObject("Scripting.FileSystemObject")
    
        srcExt = objFSO.GetExtensionName(srcFile)
    
        ' the 6 is the constant for 'CSV' format, 51 is for 'xlsx'
        ' https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel
        ' https://www.rondebruin.nl/mac/mac020.htm
        Dim outputFormat, srcDest
    
        If LCase(Mid(srcExt, 1, 2)) = "xl" Then
            outputFormat = 6
            srcDest = "csv"
        Else
            outputFormat = 51
            srcDest = "xlsx"
        End If
    
        'srcFile = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
        srcFile = objFSO.GetAbsolutePathName(srcFile)
        destFile = Replace(srcFile, srcExt, srcDest)
    
        Dim oExcel
        Set oExcel = CreateObject("Excel.Application")
        Dim oBook
        Set oBook = oExcel.Workbooks.Open(srcFile)
        ' preserve formatting? https://stackoverflow.com/a/8658845/1037948
        'oBook.Application.Columns("A:J").NumberFormat = "@"
        oBook.SaveAs destFile, outputFormat
        oBook.Close False
        oExcel.Quit
        WScript.Echo "Conversion complete of '" & srcFile & "' to '" & objFSO.GetFileName(destFile) & "'"
    
    End Function
    

提交回复
热议问题