自动将Xls转换为CSV

时间:2016-07-06 16:15:08

标签: excel csv vbscript export-to-csv

我正在使用stackoverflow上的以下VBS脚本将xls转换为csv。它工作正常。我想用底部的批处理文件运行它。我不知道如何实现我想要的。批处理文件为csv文件提供与xls文件相同的名称。因为xls文件中有两个工作表,我需要为每个xls文件生成两个csv'

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
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(1))
oBook.SaveAs WScript.Arguments.Item(2), 6

oBook.Close False
oExcel.Quit
WScript.Echo "Done"

这是批处理文件

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

我需要输入2个输出.csv文件名,一个应该是nnnnn_1.csv,另一个应该是nnnnn_2.csv来计算xls文件中的2个工作表。

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

如果您将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.Worksheets(1).Copy
Dim oBookNew1     
Set oBookNew1 = oExcel.ActiveWorkbook
oBookNew1.SaveAs Replace(WScript.Arguments.Item(1),".csv","_1.csv"), 6
oBookNew1.Close False

oBook.Worksheets(2).Copy
Dim oBookNew1     
Set oBookNew1 = oExcel.ActiveWorkbook
oBookNew2.SaveAs Replace(WScript.Arguments.Item(1),".csv","_2.csv"), 6
oBookNew2.Close False

oBook.Close False
oExcel.Quit
WScript.Echo "Done"

答案 1 :(得分:2)

与Scott上面的回答类似,我可能会更改脚本以这种方式工作,因为此更改将适用于给定工作簿中的所有工作表,并将每个工作表输出到.csv文件,而不必担心是否存在1 ,2或10张。

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))
Dim oNewBook
shIndex = 1 ' start with 1
For shIndex = 1 To oBook.Worksheets.Count     
    oBook.Worksheets(shIndex).Copy
    Set oNewBook = oExcel.ActiveWorkbook
    oNewBook.SaveAs Replace(WScript.Arguments.Item(1),".csv","_" & shIndex & ".csv"), 6
    oNewBook.Close False
Next
oBook.Close False
oExcel.Quit
WScript.Echo "Done"

答案 2 :(得分:2)

此脚本会将工作簿中的每个工作表保存为[cvs base name] - [worksheet name].csv

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 BaseName, oExcel, oBook, xlWorksheet, i

BaseName = Replace( WScript.Arguments.Item(0), ".cvs", "")
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open(WScript.Arguments.Item(0))

For Each xlWorksheet In oBook.Worksheets
    xlWorksheet.Copy
    oExcel.ActiveWorkbook.SaveAs BaseName & " - " & xlWorksheet.Name & ".csv"
    oExcel.ActiveWorkbook.Close False
Next

oBook.Close False
oExcel.Quit
WScript.Echo "Done"

答案 3 :(得分:0)

我在Python中编写了一个替代解决方案,以CVS格式导出工作簿的当前excel表。

你可以找到它here

最佳,   儒略