2011-03-22 77 views
0

我发现这个脚本,似乎无法弄清楚为什么它试图创建文件C:\IPSecWeights.xls时会引发错误。为什么在尝试创建文件时此VBScript会引发错误?

,我有迄今有问题的线路是:

Set objWorkbook = objExcel.Workbooks.Open(FileLoc) 

我得到该文件找不到错误。我怎样才能重写我的代码来解决这个问题?

Const ForReading = 1 
Const ForWriting = 2 
Const ForAppending = 8 
Dim objFSO,objFile 
Dim arrLines 
Dim strLine 
Dim objExcel,objWorkbook 
Dim FileLoc 
Dim intRow 
Dim objDictionary 

FileLoc = "C:\IPSecWeights.xls" 

Sub ExcelHeaders() 
    Set objRange = objExcel.Range("A1","G1") 
    objRange.Font.Size = 12 
    objRange.Interior.ColorIndex=15 

    objexcel.cells(1,1)="Filter Name" 
    objexcel.cells(1,2)="Source" 
    objexcel.cells(1,3)="Destination" 
    objexcel.cells(1,4)="Source Port" 
    objexcel.cells(1,5)="Destination Port" 
    objexcel.cells(1,6)="Protocol" 
    objexcel.cells(1,7)="Direction" 
End Sub 

Function RegExFind(strText,strPattern) 
    Dim regEx 
    Dim match, Matches 
    Dim arrMatches 
    Dim i : i = 0 
    Set regEx = New RegExp 
    regEx.IgnoreCase = True 
    regEx.Global = True 
    regEx.Pattern = strPattern 

    Set matches = regEx.Execute(strText) 
    ReDim arrMatches(Matches.Count) 
    For Each match In Matches 
     For Each SubMatch In match.Submatches 
      arrMatches(i) = Submatch 
      i = i + 1 
     Next 
    Next 
    RegExFind = arrMatches 
End Function 


Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile(WScript.Arguments(0),ForReading) 

Set objExcel = CreateObject("excel.application") 
Set objWorkbook = objExcel.Workbooks.Open(FileLoc) 

objExcel.Visible = True 

ExcelHeaders ' Create Excel Headers 

rePolicy = "Policy Name\s+:\s(.+)" 
reSRCAddr = "Source Address\s+:\s(.+)" 
reDSTAddr = "Destination Address\s+:\s(.+)" 
reProtocol = "Protocol\s+:\s(.+)" 
reSRCPort = "Source Port\s+:\s(.+)" 
reDSTPort = "Destination Port\s+:\s(.+)" 
reDirection = "Direction\s+:\s(.+)" 

strText = objFile.ReadAll 
objFile.Close 

Dim arrPolicy, arrSRCAddr, arrDSTAddr, arrProtocol, arrSRCPort, arrDSTPort, arrDirection 

arrPolicy = RegExFind(strText, rePolicy) 
arrSRCAddr = RegExFind(strText, reSRCAddr) 
arrDSTAddr = RegExFind(strText, reDSTAddr) 
arrProtocol = RegExFind(strText, reProtocol) 
arrSRCPort = RegExFind(strText, reSRCPort) 
arrDSTPort = RegExFind(strText, reDSTPort) 
arrDirection = RegExFind(strText, reDirection) 

intRow = 2 

For i = 0 To UBound(arrPolicy) 
    objExcel.Cells(introw,1) = arrPolicy(i) 
    objExcel.Cells(introw,2) = arrSRCAddr(i) 
    objExcel.Cells(introw,3) = arrDSTAddr(i) 
    objExcel.Cells(introw,4) = arrSRCPort(i) 
    objExcel.Cells(introw,5) = arrDSTPort(i) 
    objExcel.Cells(introw,6) = arrProtocol(i) 
    objExcel.Cells(introw,7) = arrDirection(i) 

    intRow = intRow + 1 
Next 

objFile.Close 
objWorkbook.save 
'objExcel.Quit 
+2

“无法找到文件” - 看起来很简单。检查路径。这两个文件都不在,文件名不正确,或者是权限。 – 2011-03-22 23:57:06

+0

你从哪里运行脚本?在什么用户帐户下?什么版本的Windows?正如米奇所说,这似乎很清楚。 – 2011-03-23 00:12:40

回答

3

我怀疑是“找不到文件”是一个有点误导的错误消息。也就是说,您的实际问题是文件系统权限,但VBScript固执地报告这是“文件未找到”而不是一个更明智的错误。

大概这个脚本在早期版本的Windows中运行良好,但是现在您可以在装有Vista或更高版本的计算机上尝试它,这会引入一些额外的安全功能和写保护。 User Account Control (UAC)不会让应用程序或脚本写入硬盘的根级别。

这当然不应该成为问题,因为合法的应用程序不需要篡改硬盘根目录或共享系统文件夹中的文件(如C:\Windows),但偶尔会在测试过程中出现问题。

将脚本中的文件路径更改为您保证具有读/写访问权限的内容,例如您的“我的文档”文件夹。对于部署,无论如何您都不应该硬编码文件系统路径。改为使用FileSystemObjectGetSpecialFolder function来检索路径。

+0

确定什么是奇怪的是,当我将FileLoc =“C:\ IPSecWeights.xls” 更改为FileLoc =“C:\ IPSecWeights.txt”脚本运行但显然存在问题。谢谢 – SwampYeti 2011-03-23 00:47:30

+0

@KenWhite @MitchWheat @Codygray为什么它只是有.xls文件格式的问题?有任何想法吗? – SwampYeti 2011-03-23 01:06:14

+0

由于某种原因,当我从实际文件夹创建文件它没有工作,我不得不打开excel,然后保存该文件,感谢您的帮助 – SwampYeti 2011-03-23 01:16:26

相关问题