使用用户提供的文件名将Excel工作簿转换为CSV

时间:2014-12-16 22:27:26

标签: vbscript

首先,我需要在转换之前或之后从工作表中删除前4行。此脚本中目前没有任何内容可以删除Excel文件或其创建的CSV文件中的行。

其次,我更喜欢在此脚本中传递源和目标,而不是稍后传递它们。目前,此脚本需要一个命令行来传递它看起来像这样的源和目标。

C:\exceltocsv "source.xls" "destination.csv"

不是要求source.xlsdestination.csv作为命令行参数提供,而是让它们在VBScript本身中解析。这可能吗?

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.Worksheets(2).Activate
oBook.Close False
oExcel.Quit
WScript.Echo "Done"

2 个答案:

答案 0 :(得分:0)

您可以使用InputBox功能提示用户输入。可以通过<range>.EntireRow.Delete从Excel工作表中删除行。

这样的事情应该做你想做的事情:

xls = InputBox("Enter source file.")
csv = InputBox("Enter destination file.")

Set oExcel = CreateObject("Excel.Application")

Set oBook = oExcel.Workbooks.Open(xls)
oBook.Sheets(1).Range("1:4").EntireRow.Delete
oBook.SaveAs csv, 6
oBook.Close False
oExcel.Quit

WScript.Echo "Done"

编辑:如果您想要硬编码路径,只需将它们定义为字符串:

xls = "C:\path\to\input.xls"
csv = "C:\path\to\output.csv"

Set oExcel = CreateObject("Excel.Application")

Set oBook = oExcel.Workbooks.Open(xls)
oBook.Sheets(1).Range("1:4").EntireRow.Delete
oBook.SaveAs csv, 6
oBook.Close False
oExcel.Quit

WScript.Echo "Done"

答案 1 :(得分:0)

感谢Ansgar Wiechers,我能够提出这个脚本

xls = "C:\[Path]"
csv = "c:\[Destination]"
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open(xls)

oBook.Worksheets(2).Activate
oBook.Worksheets(2).Rows("1:4").Delete
oBook.SaveAs csv, 6
oBook.Close False
oExcel.Quit

它在cmd中像冠军一样运行。万分感谢!

但是,我将这个实现到我的进程中,发现SQL Server Agent在执行VBScripts时遇到了重大问题。

cscript是建议执行脚本的命令,但它不起作用。经过更多的研究后,我发现其他人也有类似的问题,他们都建议用VB.NET而不是VBScript编写脚本。这样SSIS就可以处理脚本了。

Ansgar我将你的回答标记为答案,因为它回答了我的问题,但遗憾的是它只会让我陷入死胡同VBScript。