Преобразование XLS в CSV в командной строке
Как я могу преобразовать файл XLS в файл CSV в командной строке windows.
на машине установлен Microsoft Office 2000. Я открыт для установки OpenOffice, если это невозможно с помощью Microsoft Office.
13 ответов:
откройте блокнот, создайте файл с именем XlsToCsv.VBS и вставьте это в:
if WScript.Arguments.Count < 2 Then WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv" Wscript.Quit End If Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0)) oBook.SaveAs WScript.Arguments.Item(1), 6 oBook.Close False oExcel.Quit WScript.Echo "Done"
затем из командной строки, перейдите в папку, которую вы сохранили .vbs файл в и запустить:
XlsToCsv.vbs [sourcexlsFile].xls [destinationcsvfile].csv
это требует, чтобы Excel был установлен на машине, на которой вы находитесь.
немного измененная версия ответа ScottF, которая не требует абсолютных путей к файлам:
if WScript.Arguments.Count < 2 Then WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>" Wscript.Quit End If csv_format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1)) Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.SaveAs dest_file, csv_format oBook.Close False oExcel.Quit
я переименовал скрипт ExcelToCsv, так как этот скрипт не ограничивается xls вообще. xlsx работает просто отлично, как и следовало ожидать.
протестировано с Office 2010.
небольшое расширение на скрипте groovy VB ScottF: этот пакетный файл будет проходить через цикл .xlsx файлы в каталоге и сбросить их в *.csv файлы:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%i.csv"
Примечание: Вы можете изменить расширение .xlsx to .xls и имя скрипта ExcelToCSV для XlsToCsv
Как насчет PowerShell?
код должен выглядеть так, но не тестироваться
$xlCSV = 6 $Excel = New-Object -Com Excel.Application $Excel.visible = $False $Excel.displayalerts=$False $WorkBook = $Excel.Workbooks.Open("YOUDOC.XLS") $Workbook.SaveAs("YOURDOC.csv",$xlCSV) $Excel.quit()
вот сообщение, объясняющее, как его использовать
как я могу использовать Windows PowerShell для автоматизации Microsoft Excel?
Мне нужно было извлечь несколько резюме из разных листов, поэтому вот модифицированная версия кода plang, которая позволяет указать имя листа.
if WScript.Arguments.Count < 3 Then WScript.Echo "Please specify the sheet, the source, the destination files. Usage: ExcelToCsv <sheetName> <xls/xlsx source file> <csv destination file>" Wscript.Quit End If csv_format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(1)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(2)) Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.Sheets(WScript.Arguments.Item(0)).Select oBook.SaveAs dest_file, csv_format oBook.Close False oExcel.Quit
Почему бы не написать свой собственный?
Я вижу из вашего профиля у вас есть по крайней мере некоторый опыт C#/.NET. Я бы создал консольное приложение Windows и использовал бесплатный читатель Excel для чтения в ваших файлах Excel. Я использовал Excel Data Reader доступно из CodePlex без каких-либо проблем (одна хорошая вещь: этот читатель не требует установки Excel). Вы можете вызвать консольное приложение из командной строки.
Если вы окажетесь застрял пост здесь и Я уверен, что вы получите помощь.
вот версия, которая будет обрабатывать несколько файлов перетаскивания из windows. На основании вышеизложенных работ
Christian Lemer plang ScottF
откройте блокнот, создайте файл с именем XlsToCsv.VBS и вставьте это в:
'* Usage: Drop .xl* files on me to export each sheet as CSV '* Global Settings and Variables Dim gSkip Set args = Wscript.Arguments For Each sFilename In args iErr = ExportExcelFileToCSV(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 ExportExcelFileToCSV(sFilename) '* Settings Dim oExcel, oFSO, oExcelFile Set oExcel = CreateObject("Excel.Application") Set oFSO = CreateObject("Scripting.FileSystemObject") iCSV_Format = 6 '* Set Up sExtension = oFSO.GetExtensionName(sFilename) if sExtension = "" then ExportExcelFileToCSV = 404 Exit Function end if sTest = Mid(sExtension,1,2) '* first 2 letters of the extension, vb's missing a Like operator if not (sTest = "xl") then if (PromptForSkip(sFilename,oExcel)) then ExportExcelFileToCSV = 10 Exit Function end if End If sAbsoluteSource = oFSO.GetAbsolutePathName(sFilename) sAbsoluteDestination = Replace(sAbsoluteSource,sExtension,"{sheet}.csv") '* Do Work Set oExcelFile = oExcel.Workbooks.Open(sAbsoluteSource) For Each oSheet in oExcelFile.Sheets sThisDestination = Replace(sAbsoluteDestination,"{sheet}",oSheet.Name) oExcelFile.Sheets(oSheet.Name).Select oExcelFile.SaveAs sThisDestination, iCSV_Format Next '* Take Down oExcelFile.Close False oExcel.Quit ExportExcelFileToCSV = 0 Exit Function End Function Function PromptForSkip(sFilename,oExcel) if not (VarType(gSkip) = vbEmpty) then PromptForSkip = gSkip Exit Function end if Dim oFSO Set oFSO = CreateObject("Scripting.FileSystemObject") sPrompt = vbCRLF & _ "A filename was received that doesn't appear to be an Excel Document." & vbCRLF & _ "Do you want to skip this and all other unrecognized files? (Will only prompt this once)" & vbCRLF & _ "" & vbCRLF & _ "Yes - Will skip all further files that don't have a .xl* extension" & vbCRLF & _ "No - Will pass the file to excel regardless of extension" & vbCRLF & _ "Cancel - Abort any further conversions and exit this script" & vbCRLF & _ "" & vbCRLF & _ "The unrecognized file was:" & vbCRLF & _ sFilename & vbCRLF & _ "" & vbCRLF & _ "The path returned by the system was:" & vbCRLF & _ oFSO.GetAbsolutePathName(sFilename) & vbCRLF sTitle = "Unrecognized File Type Encountered" sResponse = MsgBox (sPrompt,vbYesNoCancel,sTitle) Select Case sResponse Case vbYes gSkip = True Case vbNo gSkip = False Case vbCancel oExcel.Quit WScript.Quit(10) '* 10 Is the error code I use to indicate there was a user abort (1 because wasn't successful, + 0 because the user chose to exit) End Select PromptForSkip = gSkip Exit Function End Function
основываясь на том, что предоставил Джон всех профессий, следующее (~n) удалило досадную проблему двойного расширения:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"
вы можете сделать это с помощью утилиты командной строки Alacon для Alasql
в Windows встроен поставщик данных Excel OLEDB; вы можете использовать это для "запроса" листа Excel через ADO.NET и запишите результаты в CSV-файл. Есть небольшое количество кода, но вам не нужно ничего устанавливать на машину.
Я попробовал решение ScottF VB и получил его на работу. Однако я хотел преобразовать файл excel с несколькими вкладками(книгами) в один .CSV-файл.
Это не сработало, только одна вкладка(та, которая выделена, когда я открываю ее через excel) была скопирована.
кто-нибудь знает о скрипте, который может конвертировать файл excel с несколькими вкладками в один .csv-файл?
ответ Скотта F-это лучшее, что я нашел в интернете. Я добавил к его коду, чтобы удовлетворить мои потребности. Я добавил:
On Error Resume Next oBook.Приложение.Колонки ("A:J").NumberFormat = "@"
Я также удалил Эхо "сделано", чтобы сделать его не интерактивным.
затем я добавил скрипт в командный файл cmd для обработки автоматических данных на почасовой основе с помощью задачи.
все эти ответы помогли мне построить следующий скрипт, который будет автоматически конвертировать XLS* файлы в XML и наоборот, путем удаления одного или нескольких файлов в скрипте (или через командную строку). Извиняюсь за форматирование janky.
' 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