首先,我需要在转换之前或之后从工作表中删除前4行。此脚本中目前没有任何内容可以删除Excel文件或其创建的CSV文件中的行。
其次,我更喜欢在此脚本中传递源和目标,而不是稍后传递它们。目前,此脚本需要一个命令行来传递它看起来像这样的源和目标。
C:\exceltocsv "source.xls" "destination.csv"
不是要求source.xls
和destination.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"
答案 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。