【问题标题】:Auto convert Xls to CSV自动将 Xls 转换为 CSV
【发布时间】:2016-11-08 18:53:01
【问题描述】:

我正在使用 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 个工作表。

感谢您的帮助

【问题讨论】:

  • 谢谢斯科特,我做不到

标签: excel csv vbscript export-to-csv


【解决方案1】:

如果您将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"

【讨论】:

  • @ThomasInzina - Copy 方法在很大程度上是一个函数。你得到什么错误?不过,VBS 可能需要更多参数。
  • @ThomasInzina - 查看我的编辑。我想我知道为什么这条线路不起作用了。
  • oExcel.ActiveWorkbook 在 VBScript 中不可用
  • 对不起,我错了。它是不可用的 ActiveWorksheet。
【解决方案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"

【讨论】:

  • 复制方法不是函数。此行失败Set oBookNew1 = oBook.Worksheets(1).Copy
  • 你是对的 - 现在修复它。 (虽然你提到的那一行实际上并没有出现在我的代码中,但我使用了shIndex 而不是 1):)
  • oExcel.ActiveWorkbook 在 VBScript 中不可用
  • 我很抱歉。我错了。它是不可用的 ActiveWorksheet。
  • 那是因为。我认为Application.Cell(1,1) 也无效。谢谢
【解决方案3】:

此脚本会将工作簿中的每个工作表保存为[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"

【讨论】:

    【解决方案4】:

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

    你可以找到它here

    最好, 朱利安

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多