Конвертировать XLS в CSV в командной строке - PullRequest
90 голосов
/ 07 декабря 2009

Как я могу преобразовать файл XLS в файл CSV в командной строке Windows.

На машине установлен Microsoft Office 2000. Я открыт для установки OpenOffice, если это невозможно с помощью Microsoft Office.

Ответы [ 13 ]

1 голос
/ 07 декабря 2009

В Windows встроен поставщик данных Excel OLEDB; Вы можете использовать это, чтобы «запросить» лист Excel через ADO.NET и записать результаты в файл CSV. Требуется небольшое количество кода, но вам не нужно ничего устанавливать на машине.

0 голосов
/ 10 августа 2018

Все эти ответы помогли мне создать следующий сценарий, который будет автоматически преобразовывать файлы XLS * в CSV и наоборот путем удаления одного или нескольких файлов в сценарии (или через командную строку). Извиняюсь за нестабильное форматирование.

' /1354678/konvertirovat-xls-v-csv-v-komandnoi-stroke
' 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
0 голосов
/ 28 декабря 2011

Скотт Ф. - лучший ответ, который я нашел в интернете. Я добавил его код для удовлетворения своих потребностей. Я добавил:

При ошибке Возобновить Далее oBook.Application.Columns ("A: J"). NumberFormat = "@" <- Перед строкой SaveAs, чтобы убедиться, что мои данные сохранены в формате текста, чтобы исключить удаление ведущих нулей и запятых в числовых строках в моих данных т.е. (от 1200 до 1200). Диапазон столбцов должен быть скорректирован в соответствии с вашими потребностями (A: J). </p>

Я также убрал «Эхо», чтобы сделать его неинтерактивным.

Затем я добавил сценарий в командный файл cmd для ежечасной обработки автоматических данных с помощью задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...