51Testing软件测试论坛

标题: qtp中怎么得到excel中某一列的行数? [打印本页]

作者: kudianxin    时间: 2011-10-9 18:11
标题: qtp中怎么得到excel中某一列的行数?
在excel表里的一个sheet中A列有10行数据,B列有20行数据,C列有30行数据。
怎么获得A列的行数?
作者: ermine    时间: 2011-10-10 13:46
        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.
作者: softCore    时间: 2011-10-10 17:10
这个写法还是拿不到具体列的行数,等我回去想想弄个好用的上来。
作者: softCore    时间: 2011-10-10 18:33
下面的代码凑合能用,但是不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
作者: 819longjiayan    时间: 2011-10-11 09:19
QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看
作者: 819longjiayan    时间: 2011-10-11 09:20
QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看
作者: 819longjiayan    时间: 2011-10-11 09:20
QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看
作者: 819longjiayan    时间: 2011-10-11 09:21
QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看
作者: 819longjiayan    时间: 2011-10-11 09:21
QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看
作者: 819longjiayan    时间: 2011-10-11 11:48
QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看
作者: rogerliu0303    时间: 2011-10-11 12:48
获取sheet中的usedRange,就可以计算出某列的行数了
作者: softCore    时间: 2011-10-11 13:15
usedrange()只能算出最长的列的行数,不能算指定列,最好的办法是从QTP调用formula,但是有点不太好用,manual写的太少,需要自己探索。
作者: kudianxin    时间: 2011-10-13 07:48
回复 2# ermine


    谢谢版主, 我还有个问题,在excel表的一个sheet中,只写一个功能点的测试数据好,还是可以把多个功能点的测试数据在一个sheet中写在不同列好?
  比如有个登陆和添加两个功能点,在一个sheet中A、B列分别写用户名和密码测试数据,在其他列写添加功能的测试数据,这样写好,还是登陆和添加的测试数据分别写在不同的sheet中好?
作者: kudianxin    时间: 2011-10-13 07:59
回复 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对象是什么关系呀?
作者: kudianxin    时间: 2011-10-13 08:00
回复 12# softCore


    谢谢您提供的思路,呵呵。。。
作者: ermine    时间: 2011-10-13 11:44
回复 13# kudianxin

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

不了解你们什么样的业务,仅供参考了
作者: kudianxin    时间: 2011-10-13 13:04
回复 16# ermine


    多谢版主,我们有个简单的流程是这样的,登陆—添加部门—给部门添加用户—给用户建立账号。
我之所以问怎么获得一个sheet中某列的行数,就是想把着一串业务数据放在一个sheet中的不同列的。
   一个账号登陆后可以建立多个部门,在一个部门中可以键多个用户,这样势必是要循环嵌套的,获得某列的行数就是为了控制循环次数的。
作者: deadhunter    时间: 2011-10-14 09:27
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
作者: wqh1208    时间: 2011-10-23 01:44
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
作者: wqh1208    时间: 2011-10-23 16:18
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
作者: gszhaochengyong    时间: 2011-11-2 14:02
学习了
作者: tiandiwoniu    时间: 2011-11-23 14:26
感谢wqh1208
作者: tiandiwoniu    时间: 2011-11-23 14:27
感谢wqh1208




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