kudianxin 发表于 2011-10-9 18:11:58

qtp中怎么得到excel中某一列的行数?

在excel表里的一个sheet中A列有10行数据,B列有20行数据,C列有30行数据。
怎么获得A列的行数?

ermine 发表于 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.

softCore 发表于 2011-10-10 17:10:14

这个写法还是拿不到具体列的行数,等我回去想想弄个好用的上来。

softCore 发表于 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

819longjiayan 发表于 2011-10-11 09:19:38

QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看

819longjiayan 发表于 2011-10-11 09:20:40

QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看

819longjiayan 发表于 2011-10-11 09:20:46

QTP中不是有专门的获取表格总数的方法吗?用那个试试,具体我忘了,呵呵,可以帮你看看

819longjiayan 发表于 2011-10-11 09:21:13

QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看

819longjiayan 发表于 2011-10-11 09:21:21

QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看

819longjiayan 发表于 2011-10-11 11:48:13

QTP中不是有专门的获取表格总数的方法吗?用那个试试,很久没用具体我忘了,呵呵,可以帮你看看

rogerliu0303 发表于 2011-10-11 12:48:36

获取sheet中的usedRange,就可以计算出某列的行数了

softCore 发表于 2011-10-11 13:15:03

usedrange()只能算出最长的列的行数,不能算指定列,最好的办法是从QTP调用formula,但是有点不太好用,manual写的太少,需要自己探索。

kudianxin 发表于 2011-10-13 07:48:44

回复 2# ermine


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

kudianxin 发表于 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对象是什么关系呀?

kudianxin 发表于 2011-10-13 08:00:52

回复 12# softCore


    谢谢您提供的思路,呵呵。。。

ermine 发表于 2011-10-13 11:44:42

回复 13# kudianxin

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

不了解你们什么样的业务,仅供参考了

kudianxin 发表于 2011-10-13 13:04:25

回复 16# ermine


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

deadhunter 发表于 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

wqh1208 发表于 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

wqh1208 发表于 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] 2
查看完整版本: qtp中怎么得到excel中某一列的行数?