在命令行上将XLS转换为CSV

我怎样才能在Windows命令行上将XLS文件转换为CSV文件。

机器安装了Microsoft Office 2000。 如果无法使用Microsoft Office,我愿意安装OpenOffice。

打开记事本,创build一个名为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答案的稍微修改版本,不需要绝对文件path:

 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 2010testing。

ScottF的groovy VB脚本的一个小扩展:这个batch file将遍历目录中的.xlsx文件并将它们转储到* .csv文件中:

 FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%i.csv" 

注意:您可以将扩展名.xlsx更改为脚本ExcelToCSV的.xls和名称以XlsToCsv

用PowerShell怎么样?

代码应该看起来像这样,但没有经过testing

 $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() 

这是一个解释如何使用它的post

我如何使用Windows PowerShell自动化Microsoft Excel?

我需要从不同的工作表中提取几个cvs,所以这里是一个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 

为什么不写自己的?

我从你的个人资料中看到你至less有一些C#/ .NET的经验。 我会创build一个Windows控制台应用程序,并使用免费的Excel阅读器读取您的Excel文件。 我已经使用了CodePlex提供的Excel Data Reader ,没有任何问题(一件好事:这个阅读器不需要安装Excel)。 您可以从命令行调用您的控制台应用程序。

如果你发现自己卡在这里,我相信你会得到帮助。

这是一个版本,将处理多个文件从窗口拖放。 基于以上的作品

 Christian Lemer plang ScottF 

打开记事本,创build一个名为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 

FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv" )删除了令人讨厌的双重扩展问题: FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"

Windows中内置了一个Excel OLEDB数据提供程序; 您可以使用它通过ADO.NET“查询”Excel表格并将结果写入CSV文件。 有less量的编码需要,但你不应该在机器上安装任何东西。

我尝试了ScottF VB解决scheme,并得到它的工作。 不过,我想将一个多选项卡(工作簿)excel文件转换成一个.csv文件。

这不起作用,只有一个选项卡(通过Excel打开时突出显示的选项卡)被复制。

是否有人知道一个脚本,可以将一个多选项卡的Excel文件转换成一个.csv文件?

您可以使用Alacon – Alasql数据库的命令行实用程序。 它适用于Node.js,所以你需要安装Node.js ,然后安装Alasql包。

要将Excel文件转换为CVS(TSV),您可以input:

 > node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})" 

默认情况下,Alasql从“Sheet1”转换数据,但是可以使用参数进行更改:

 {headers:false, sheetid: 'Sheet2', range: 'A1:C100'} 

Alacon支持其他types的转换(CSV,TSV,TXT,XLSX,XLS)和SQL语言结构(请参阅用户手册中的示例)。

斯科特F的答案是我在互联网上find的最好的答案。 我确实添加了他的代码来满足我的需求。 我补充说:

On Error Resume Next < – 为了解决我的批处理中缺less的xls文件的问题。 oBook.Application.Columns(“A:J”)。NumberFormat =“@” < – SaveAs行之前,确保我的数据被保存为文本格式,以保持excel删除前导零,并消除数据string中的逗号即(1200至1200)。 列的范围应调整以满足您的需求(A:J)。

我也删除回声“完成”,使其不互动。

然后,我将脚本添加到cmdbatch file中,以通过任务按小时处理自动化数据。