xiaoqiang_888 发表于 2012-7-4 10:32:11

VBS读EXCEL后如何关闭EXCEL进程

读excel代码如下
Function ImportDataSheet(sFileName,sSheetName,sDataTable)
    On Error Resume Next
                Dim excelApp
                Dim excelSheet
                Dim colCount
                Dim rowCount
                Dim param
                DataTable.DeleteSheet sDataTable
                DataTable.AddSheet sDataTable
                Set excelApp = CreateObject("Excel.Application")
                excelApp.workBooks.open(sFileName)
                bSheetExist=False
                For i=1 to excelApp.sheets.Count
                        If sSheetName=excelApp.sheets.item(i) Then
                                bSheetExist=True
                        End If
                Next
                If bSheetExist Then
                        Set excelSheet = excelApp.sheets.item(sSheetName)
                        colCount = excelSheet.usedRange.columns.count
                        For i = 1 to colCount
                                param = excelSheet.cells(1,i)
                                DataTable.GetSheet(sDataTable).AddParameter param,""
                        Next
                        rowCount = excelSheet.usedRange.rows.count
                        For i = 2 to rowCount
                        DataTable.GetSheet(sDataTable).SetCurrentRow i-1
                        For j = 1 to colCount
                                param = excelSheet.cells(i,j)
                                DataTable.Value(j,sDataTable) = param
                        Next
                Next
                excelApp.Application.Close
                excelApp.Application.Quit
                Set excelApp=Nothing
                End If
                If err.Number<>0 Then
                        excelApp.Application.Close
                        excelApp.Application.Quit
                        Set excelApp=Nothing
                        Call QTPSystemLog("ImportDataSheet",err)
                        Err.Clear
                End If
        On Error Goto 0
End Function
各位看看代码有什么错误,问题在于每次执行后进程中仍然会有Excel进程,而且频繁使用taskkill杀死Excel.exe进程,会导致taskkill进程死锁,各位有什么好方法。
请别说使用qtp自带的导入excel方法。

user603 发表于 2012-7-4 12:03:17

这论坛怎么了,回复老是显示不成功,但实际成功了。

xiaoqiang_888 发表于 2012-7-4 12:31:27

回复 4# user603
大哥您看代码了嘛?
excelApp.Application.Close
excelApp.Application.Quit
Set excelApp=Nothing

user603 发表于 2012-7-4 12:54:27

回复 3# xiaoqiang_888

就算没帮到你,你也不用这样。

xiaoqiang_888 发表于 2012-7-4 14:24:38

回复 4# user603
嗯?晕 我哪样了?只是把你说的解决方案又贴出来了一边而已~您想到哪去了?

mimmy 发表于 2012-7-4 15:59:22

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:39

回复 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:37

回复 7# xiaoqiang_888
只是读文件的话可以不用save

xjwldlover 发表于 2012-7-10 11:25:55

如6楼,添一句 excelApp.Quit
页: [1]
查看完整版本: VBS读EXCEL后如何关闭EXCEL进程