2016-07-06 91 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

最佳, 朱利安