51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6700|回复: 22
打印 上一主题 下一主题

[求助] qtp中怎么得到excel中某一列的行数?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-10-9 18:11:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在excel表里的一个sheet中A列有10行数据,B列有20行数据,C列有30行数据。
怎么获得A列的行数?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-10-10 13:46:12 | 只看该作者
        Set objExcel = CreateObject("Excel.Application")
               
        Set ResBook=objExcel.WorkBooks.open("C:\test.xls")
        Set ResSheet=ResBook.WorkSheets("Sheet1")
        msgbox ResSheet.Range("A65535").End(xlUp).Row

Range("A65535").End(xlUp)等同于先选中A65535这个单元格,然后按End+Up,如果A列什么都没有,会打出1.
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-10-10 17:10:14 | 只看该作者
这个写法还是拿不到具体列的行数,等我回去想想弄个好用的上来。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2011-10-10 18:33:29 | 只看该作者
下面的代码凑合能用,但是不flexible
Set xlHandler = CreateObject("Excel.Application")
xlHandler.DisplayAlerts = False
Set xlBook = xlHandler.WorkBooks.Open("D:\Temp01\test.xls")
'xlBook.RunAutoMacros xlAutoOpen
xlHandler.Run "Sheet1.test"
xlBook.Save
xlBook.Close
xlHandler.Quit
Set xlBook = Nothing
Set xlHandler = Nothing

'Macro define in the Sheet1
Sub test()
    Set Rng = Worksheets(1).Range("A:A")
    MsgBox Application.WorksheetFunction.CountA(Rng)
End Sub
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-13 11:02
  • 签到天数: 55 天

    连续签到: 1 天

    [LV.5]测试团长

    5#
    发表于 2011-10-11 09:19:38 | 只看该作者
    QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-13 11:02
  • 签到天数: 55 天

    连续签到: 1 天

    [LV.5]测试团长

    6#
    发表于 2011-10-11 09:20:40 | 只看该作者
    QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-13 11:02
  • 签到天数: 55 天

    连续签到: 1 天

    [LV.5]测试团长

    7#
    发表于 2011-10-11 09:20:46 | 只看该作者
    QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-13 11:02
  • 签到天数: 55 天

    连续签到: 1 天

    [LV.5]测试团长

    8#
    发表于 2011-10-11 09:21:13 | 只看该作者
    QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-13 11:02
  • 签到天数: 55 天

    连续签到: 1 天

    [LV.5]测试团长

    9#
    发表于 2011-10-11 09:21:21 | 只看该作者
    QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-13 11:02
  • 签到天数: 55 天

    连续签到: 1 天

    [LV.5]测试团长

    10#
    发表于 2011-10-11 11:48:13 | 只看该作者
    QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2011-10-11 12:48:36 | 只看该作者
    获取sheet中的usedRange,就可以计算出某列的行数了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2011-10-11 13:15:03 | 只看该作者
    usedrange()只能算出最长的列的行数,不能算指定列,最好的办法是从QTP调用formula,但是有点不太好用,manual写的太少,需要自己探索。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2011-10-13 07:48:44 | 只看该作者
    回复 2# ermine


        谢谢版主, 我还有个问题,在excel表的一个sheet中,只写一个功能点的测试数据好,还是可以把多个功能点的测试数据在一个sheet中写在不同列好?
      比如有个登陆和添加两个功能点,在一个sheet中A、B列分别写用户名和密码测试数据,在其他列写添加功能的测试数据,这样写好,还是登陆和添加的测试数据分别写在不同的sheet中好?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2011-10-13 07:59:52 | 只看该作者
    回复 4# softCore
    Set xlHandler = CreateObject("Excel.Application")
    xlHandler.DisplayAlerts = False
    Set xlBook = xlHandler.WorkBooks.Open("D:\Temp01\test.xls")
    'xlBook.RunAutoMacros xlAutoOpen
    xlHandler.Run "Sheet1.test"
    xlBook.Save
    xlBook.Close
    xlHandler.Quit
    Set xlBook = Nothing
    Set xlHandler = Nothing

    'Macro define in the Sheet1
    Sub test()
    Set Rng = Worksheets(1).Range("A:A")
    MsgBox Application.WorksheetFunction.CountA(Rng)
    End Sub


        十分感谢,能对您的这段代码简单解释下吗?
         你创建的excel对象对它的操作实现什么功能了?
    'xlBook.RunAutoMacros xlAutoOpen这一句是什么作用?
        在sub,与你创建的excel对象是什么关系呀?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2011-10-13 08:00:52 | 只看该作者
    回复 12# softCore


        谢谢您提供的思路,呵呵。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2011-10-13 11:44:42 | 只看该作者
    回复 13# kudianxin

    看业务流程吧,如果流程是先登录,再添加,是一套的流程,那感觉多个功能点写成一个sheet比较好,这样比较直观. 用了那个ID, 添加了什么信息,比较好维护.
    如果是分开来, 登录的ID就是用来测试登录的,添加的数据就是用来测试添加的,最好分开不同的sheet. 这样的话, 就不会出现A列有10行, B列有20行的数据了.

    不了解你们什么样的业务,仅供参考了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
     楼主| 发表于 2011-10-13 13:04:25 | 只看该作者
    回复 16# ermine


        多谢版主,我们有个简单的流程是这样的,登陆—添加部门—给部门添加用户—给用户建立账号。
    我之所以问怎么获得一个sheet中某列的行数,就是想把着一串业务数据放在一个sheet中的不同列的。
       一个账号登陆后可以建立多个部门,在一个部门中可以键多个用户,这样势必是要循环嵌套的,获得某列的行数就是为了控制循环次数的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-11-15 14:58
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    18#
    发表于 2011-10-14 09:27:14 | 只看该作者
    Function Getdata()
       Dim avalue,count

       '对excel进行操作
       Set Excel = CreateObject(Excel.Application)
       Set OpenExcel = Excel.Wrokbooks.open("D:\test.xls")
       Excel.Visible = True
       OpenExcel.WorkSheets("Sheet").Activate

       count = OpenExcel.ActiveSheet.UsedRange.Rows.Count  '获取行数
       
       For i=1 To count
         OpenExcel.WorkSheets("Sheet").Activate
         avalue = Excel.Cells(i,1).Value
       Next
       Set Excel = Nothing
    End Function
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2011-10-23 01:44:56 | 只看该作者
    Function GetRowCountByColumn(strPath, strSheetName, iColumnNum)
            Dim i, iRowCount, xlApp, OpenExcel
            Set xlApp = CreateObject("Excel.Application")
            Set OpenExcel = xlApp.Workbooks.Open(strPath)
            iRowCount = OpenExcel.WorkSheets(strSheetName).UsedRange.Rows.Count       
            For i = 1 To iRowCount
                    If OpenExcel.Worksheets(strSheetName).Cells(iRowCount - i + 1, iColumnNum) <> "" Then
                            GetRowCountByColumn = iRowCount - i + 1
                            Exit For
                    End If
            Next
            OpenExcel.Close
            Set xlApp = Nothing
    End Function
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2011-10-23 16:18:48 | 只看该作者
    Function GetRowCountByColumn(strPath, strSheetName, strColumnNum)
            Dim i, iRowCount, xlApp, OpenExcel
            Set xlApp = CreateObject("Excel.Application")
            Set OpenExcel = xlApp.Workbooks.Open(strPath)
            iRowCount = OpenExcel.WorkSheets(strSheetName).UsedRange.Rows.Count
            For i = 1 To iRowCount
                    If OpenExcel.WorkSheets(strSheetName).Cells(iRowCount - i + 1, strColumnNum) <> "" Then
                            GetRowCountByColumn = iRowCount - i + 1
                            Exit For
                    End If
            Next
            If GetRowCountByColumn = "" Then
                    GetRowCountByColumn = 0
            End If
            OpenExcel.Close
            Set xlApp = Nothing
    End Function
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-18 18:33 , Processed in 0.085757 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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