2016-07-06 130 views
1

我正在使用以下在stackoverflow上找到的VBS脚本将xls转换为csv。它工作正常。我想用批处理文件在底部运行它。我不知道如何实现我想要的。批处理文件为csv文件提供与xls文件相同的名称。由于XLS文件中有两个工作,我需要产生两个CSV的每个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个工作表。

感谢所有帮助

+0

感谢斯科特,我不能做到这一点 – emp1953

回答

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" 
+0

@ThomasInzina - Copy方法是非常多的功能。你得到的错误是什么?不过,它可能需要更多的参数。 –

+0

@ThomasInzina - 看我的编辑。我想我知道为什么这条线路没有工作。 –

+1

oExcel.ActiveWorkbook在VBScript中不可用 – 2016-07-06 19:55:04

2

同样斯科特的回答以上,我可能会改剧本,以这种方式工作,因为这更改将适用于给定工作簿中的所有工作表,并将每个输出到.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" 
+1

复制方法不是一个函数。这行失败了'Set oBookNew1 = oBook.Worksheets(1).Copy' – 2016-07-06 19:43:01

+0

你是对的 - 现在修复它。 (尽管你提到的这行代码实际上并不在我的代码中,我使用'shIndex'而不是1):) – Dave

+0

oExcel.ActiveWorkbook在VBScript中不可用 – 2016-07-06 20:46:45

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" 
0

我已经写在Python一种替代的解决方案,出口本擅长于CVS格式的工作簿的片材。

你可以找到它here

最佳, 朱利安