51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2780|回复: 10
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    跳转到指定楼层
    1#
    发表于 2013-9-13 10:39:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    如以下脚本:
    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

    能否将红色部分和蓝色部分封装起来,每次需要时直接调用,无需每次都创建和释放,有没有好的提议
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    2#
    发表于 2013-9-13 13:24:41 | 只看该作者
    回复 1# fsweicaixia


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

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    3#
     楼主| 发表于 2013-9-13 16:12:19 | 只看该作者
    我是懒得重复写,
    我修改成这样了
    Dim excelApp 'As Excel.Application
    Dim oWorkbook 'As Excel.workbook
    Dim oSheet 'As Excel.worksheet

    Function  createExcel(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

    创建和关闭时直调用一下就成了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    4#
    发表于 2013-9-13 17:03:32 | 只看该作者
    回复 3# fsweicaixia


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

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    5#
     楼主| 发表于 2013-9-13 18:14:34 | 只看该作者
    因为在每个步骤都要写入一行数据到excel,再说了,通用的excel方法也好几个那,每个方法都要写创建关闭的步骤,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    6#
     楼主| 发表于 2013-9-13 18:15:13 | 只看该作者
    因为在每个步骤都要写入一行数据到excel,再说了,通用的excel方法也好几个那,每个方法都要写创建关闭的步骤,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    7#
    发表于 2013-9-16 09:13:12 | 只看该作者
    回复 6# fsweicaixia


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

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    8#
     楼主| 发表于 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



    Function  createExcel(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
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-4-5 09:13
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2013-9-23 14:38:18 | 只看该作者
    好高端、求指教、
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    10#
     楼主| 发表于 2013-9-29 15:42:46 | 只看该作者
    一点也不高端 就是拆分了一下 懒得每次都要写
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-30 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    11#
     楼主| 发表于 2013-9-29 15:44:26 | 只看该作者
    一点也不高端 就是拆分了一下 懒得每次都要写
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-24 02:33 , Processed in 0.074873 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表