fsweicaixia 发表于 2013-9-13 10:39:59

关于创建Excel自动化模型对象和释放资源的问题

如以下脚本:
Function getRowColumn(excelPath,x,y)

Set excelApp = CreateObject("excel.application")

Set oWorkbook = excelApp.Workbooks.Open(excelPath)

Set oSheet = excelApp.Sheets.Item(1)



getRowColumn = oSheet.cells(x,y)

excelApp.Quit


Set oSheet = Nothing

Set oWorkbook = Nothing

Set excelApp = nothing
End Function

能否将红色部分和蓝色部分封装起来,每次需要时直接调用,无需每次都创建和释放,有没有好的提议

黑羽祭 发表于 2013-9-13 13:24:41

回复 1# fsweicaixia


    你这个已经封装在一个FUNCTION里了啊,
每次用直接用这个Function就行了,创建和释放交给计算机做就行了。
这样就行了

fsweicaixia 发表于 2013-9-13 16:12:19

我是懒得重复写,
我修改成这样了
Dim excelApp 'As Excel.Application
Dim oWorkbook 'As Excel.workbook
Dim oSheet 'As Excel.worksheet

FunctioncreateExcel(excelApp,oWorkbook,oSheet,filepath,oSheetName)
        set excelApp = CreateObject("excel.application")
        set oWorkbook = excelApp.Workbooks.Open(filepath)
'        set oSheet = excelApp.Sheets.Item(1)
        set oSheet =oWorkbook.Worksheets(oSheetName)
End function

Function CloseExcel(excelApp,oWorkbook,oSheet)
        excelApp.Quit()
        set oSheet = Nothing
        set oWorkbook = Nothing
        set excelApp = Nothing
End function

创建和关闭时直调用一下就成了

黑羽祭 发表于 2013-9-13 17:03:32

回复 3# fsweicaixia


    怎么会重复写呢?你是想要取数据么?如果是取数据,可以一次性全部取出,存至一个二维数组,这样只要打开关闭一次EXCEL了。
而且就算每次只要一条,你最上面的函数也是这样实现的。
你分成两个,我不觉的会更简单,而且担心会有问题。

fsweicaixia 发表于 2013-9-13 18:14:34

因为在每个步骤都要写入一行数据到excel,再说了,通用的excel方法也好几个那,每个方法都要写创建关闭的步骤,

fsweicaixia 发表于 2013-9-13 18:15:13

因为在每个步骤都要写入一行数据到excel,再说了,通用的excel方法也好几个那,每个方法都要写创建关闭的步骤,

黑羽祭 发表于 2013-9-16 09:13:12

回复 6# fsweicaixia


    每次创建和关闭的动作反正是用计算机完成的,大可不必省去。
难道还怕电脑累着不成?
到是你如果只在脚本前后只是用一次打开和关闭动作,如果半路脚本出现了问题场景恢复后重新执行,或者半路终止运行之类的情况,难道你不怕Excel读取进程未关闭造成下一轮的测试失败?

fsweicaixia 发表于 2013-9-16 11:38:10

我贴脚本出来吧
Function getCellValue(ByVal filepath,ByVal columnname,ByVal columnValue,ByVal columnum)
      ''      Err = 0
      '      On Error Resume Next
       createExcel excelApp,oWorkbook,oSheet,filepath,"Sheet1"
      M = oSheet.UsedRange.Count'统计含有数据单元格
'      msgbox M
      Set oCell = oSheet.Range(columnname & M).Find(columnvalue)'查找功能点编号为ModuleCade单元格

      If oCell Is Nothing Then
                GetDataCoordinate = "Not Found"
      Else
                rnum = oCell.Row
                getCellValue = oSheet.cells(rnum,columnum)
      End if
      CloseExcel excelApp,oWorkbook,oSheet

End Function

Function getRowCount(excelPath)
      Set excelApp = CreateObject("excel.application")
      Set oWorkbook = excelApp.Workbooks.Open(excelPath)
      Set oSheet = excelApp.Sheets.Item(1)
      getRowCount = oSheet.UsedRange.Rows.Count
       CloseExcel excelApp,oWorkbook,oSheet
End Function



FunctioncreateExcel(excelApp,oWorkbook,oSheet,filepath,oSheetName)
      set excelApp = CreateObject("excel.application")
      set oWorkbook = excelApp.Workbooks.Open(filepath)
'      set oSheet = excelApp.Sheets.Item(1)
      set oSheet =oWorkbook.Worksheets(oSheetName)
End function

Function CloseExcel(excelApp,oWorkbook,oSheet)
      excelApp.Quit()
      set oSheet = Nothing
      set oWorkbook = Nothing
      set excelApp = Nothing
End function

linglvchao 发表于 2013-9-23 14:38:18

:(好高端、求指教、

fsweicaixia 发表于 2013-9-29 15:42:46

一点也不高端 就是拆分了一下 懒得每次都要写

fsweicaixia 发表于 2013-9-29 15:44:26

一点也不高端 就是拆分了一下 懒得每次都要写
页: [1]
查看完整版本: 关于创建Excel自动化模型对象和释放资源的问题