【发布时间】:2013-11-07 14:28:30
【问题描述】:
我的 vbscript 创建 Excel 对象并从 Excel 文件读取时遇到问题。
vbscript 从 Excel 宏执行,然后创建并打开 Excel 文件并从中读取。问题是 Excel 对象并非总是关闭,即使我正在尝试关闭它。
这是来自 vbscript 的代码:
Set ExcelObject = createobject("Excel.Application")
ExcelObject.workbooks.open testWorkBookPath
Set testActionArray = CreateObject( "System.Collections.ArrayList" )
Function getTestsCaseActions (testsPath, esheet, row, col)
Set my_sheet = ExcelObject.sheets.item(esheet)
tempArray = array(my_sheet.cells(row, col-2), "")
testActionArray.Add tempArray
Do While my_sheet.cells(row, col).Value <> ""
tempArray = array(my_sheet.cells(row, col), my_sheet.cells(row+1, col))
testActionArray.Add tempArray
col = col+1
Loop
End Function
getTestsCaseActions testWorkBookPath, testCaseSheet, 3, 4
ExcelObject.Quit
现在,如果我运行上述代码并观察进程资源管理器,则会在脚本启动时生成一个新的 Excel 进程,然后按预期关闭。
但是,如果我在运行函数后在 ExcelObject.Quit 行之前插入此代码:
For Each ArrayItem in testActionArray
IF ArrayItem(1) = "" Then
Wscript.Echo ArrayItem(0)
Else
Wscript.Echo ArrayItem(0) & " -> " & ArrayItem(1)
End If
Next
ExcelObject.Quit (STILL HERE)
然后生成的进程不会退出,并且进程列表会不断增长,直到 Excel 完全失效。
我不明白这个;最后一点代码所做的就是遍历 ArrayList 并打印内容。为什么进程没有退出?
编辑:似乎至少有一些 Excel 对象最终会从 Process Explorer 中消失,但这大约需要 20-30 分钟。这只是其中的一小部分——大多数还在那里。至少我目前的列表已经缩小了一些,但仍有大约 15 个 Excel 进程在运行。
此外,突然出现以下消息:
File Now Available
'filename.xlsm ' is now available for editing. Choose Read-Write to open it for editing.
【问题讨论】:
-
Excel 是否可能认为正在编辑工作簿?可能 Excel 正试图显示“是否要保存更改”对话框。在退出之前尝试
dim book: for each book in ExcelObject.Workbooks: book.saved = true: next之类的东西。 -
看来“oracle 认证专家”发布的那句话有帮助。我会保留一段时间,看看进程浏览器。
-
oracle 认证专家:据我所知,您的建议有效。如果您将其添加为答案,我会给它正确的信用。