51Testing软件测试论坛

标题: VBS读EXCEL后如何关闭EXCEL进程 [打印本页]

作者: xiaoqiang_888    时间: 2012-7-4 10:32
标题: VBS读EXCEL后如何关闭EXCEL进程
读excel代码如下

  1. Function ImportDataSheet(sFileName,sSheetName,sDataTable)
  2.     On Error Resume Next
  3.                 Dim excelApp
  4.                 Dim excelSheet
  5.                 Dim colCount
  6.                 Dim rowCount
  7.                 Dim param
  8.                 DataTable.DeleteSheet sDataTable
  9.                 DataTable.AddSheet sDataTable
  10.                 Set excelApp = CreateObject("Excel.Application")
  11.                 excelApp.workBooks.open(sFileName)
  12.                 bSheetExist=False
  13.                 For i=1 to excelApp.sheets.Count
  14.                         If sSheetName=excelApp.sheets.item(i) Then
  15.                                 bSheetExist=True
  16.                         End If
  17.                 Next
  18.                 If bSheetExist Then
  19.                         Set excelSheet = excelApp.sheets.item(sSheetName)
  20.                         colCount = excelSheet.usedRange.columns.count
  21.                         For i = 1 to colCount
  22.                                 param = excelSheet.cells(1,i)
  23.                                 DataTable.GetSheet(sDataTable).AddParameter param,""
  24.                         Next
  25.                         rowCount = excelSheet.usedRange.rows.count
  26.                         For i = 2 to rowCount
  27.                         DataTable.GetSheet(sDataTable).SetCurrentRow i-1
  28.                         For j = 1 to colCount
  29.                                 param = excelSheet.cells(i,j)
  30.                                 DataTable.Value(j,sDataTable) = param
  31.                         Next
  32.                 Next
  33.                 excelApp.Application.Close
  34.                 excelApp.Application.Quit
  35.                 Set excelApp=Nothing
  36.                 End If
  37.                 If err.Number<>0 Then
  38.                         excelApp.Application.Close
  39.                         excelApp.Application.Quit
  40.                         Set excelApp=Nothing
  41.                         Call QTPSystemLog("ImportDataSheet",err)
  42.                         Err.Clear
  43.                 End If
  44.         On Error Goto 0
  45. End Function
复制代码
各位看看代码有什么错误,问题在于每次执行后进程中仍然会有Excel进程,而且频繁使用taskkill杀死Excel.exe进程,会导致taskkill进程死锁,各位有什么好方法。
请别说使用qtp自带的导入excel方法。
作者: user603    时间: 2012-7-4 12:03
这论坛怎么了,回复老是显示不成功,但实际成功了。
作者: xiaoqiang_888    时间: 2012-7-4 12:31
回复 4# user603
大哥您看代码了嘛?

  1. excelApp.Application.Close
  2. excelApp.Application.Quit
  3. Set excelApp=Nothing
复制代码

作者: user603    时间: 2012-7-4 12:54
回复 3# xiaoqiang_888

就算没帮到你,你也不用这样。
作者: xiaoqiang_888    时间: 2012-7-4 14:24
回复 4# user603
嗯?晕 我哪样了?只是把你说的解决方案又贴出来了一边而已~您想到哪去了?
作者: mimmy    时间: 2012-7-4 15:59
Set wkBook=excelApp.workBooks.open(sFileName)
......
wkBook.Save
wkBook.Close
excelApp.Quit
Set wkBook=Nothing
Set excelApp=Nothing
作者: xiaoqiang_888    时间: 2012-7-4 16:42
回复 6# mimmy
读也要save?

还有其他代码是不是和下面的效果是一样的?
Set excelApp = CreateObject("Excel.Application")
excelApp.workBooks.open(sFileName)
……
excelApp.Application.Close
excelApp.Application.Quit
Set excelApp=Nothing

是不是Set wkBook=Nothing也相当吧excelApp.workBooks.open给关了?
但是发现vb对于线程以及对象的处理很弱,发现即使=Nothing了 但是对象未必销毁了
作者: mimmy    时间: 2012-7-4 17:20
回复 7# xiaoqiang_888
只是读文件的话可以不用save
作者: xjwldlover    时间: 2012-7-10 11:25
如6楼,添一句 excelApp.Quit




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2