QTP调用Excel中的数据(转)

上一篇 / 下一篇  2014-03-24 13:51:51 / 个人分类:QTP

一、引用DataTable中数据
第一种方法:手动将Excel表加入QTP的datatable中,然后在代码中调用数据。

通过在“file>settings>resource”中添加外部excel文件,我们可以将该外部数据文件作为data table使用。且不会在默认的Defualt.xls中存储。

 

Dim i

'获取行数
For i=1 todatatable.GetSheet("Sheet1").GetRowCount

Browser("币种").Page("币种").Frame("Container_FrameBody").WebElement("新建").Click
Browser("币种").Page("币种").Frame("Container_FrameDynamicSidebar").WebEdit("Code:C").Click
'Browser("币种").Page("币种").Frame("Container_FrameDynamicSidebar").WebEdit("Code:C").Set"ABC"

'此处ABC为手动录制时的结果,将ABC换为Excel中的数据
Browser("币种").Page("币种").Frame("Container_FrameDynamicSidebar").WebEdit("Code:C").SetDataTable("Code", Sheet1)

'DataTable("Code", dtLocalSheet)也可写为DataTable.value("Code", dtLocalSheet)

Next

二、引用Excel中数据

第一种方法:直接编写脚本,使datatable读取已有的excel中的数据,此中方法不识别xlsx格式的excel文件。

Option explicit
Dim rowcount
Dim filepath
Dim i,name1,Grade

'可使用相对路径找出相应的表,但要求test1和action1在同一个目录下,否则相对路径需做相应修改
filepath=pathfinder.Locate("test1.xls")
datatable.Import filepath

'也可直接使用绝对路径引用excel表
'datatable.Import("C:\Documents and Settings\Administrator\桌面\test1.xls")

rowcount=datatable.GetRowCount
For i=0 to rowcount-1

 datatable.GetCurrentRow
 name1=datatable.Value("Name")
 Grade=datatable.Value("Grade")
 datatable.SetNextRow
 If datatable.GetCurrentRow>rowcount Then
  Exit for
 End If
Next

第二种方法:直接抛弃DataTable功能,使用EOM来对数据表进行操控

这个是个非常非常常用且实用的函数,使用QTP读取Excel中的数据。
先贴上函数:

'========================================
'名     称:QTP_ReadExcel
'作     用:从Excel读数据
'参     数:sFileName:EXCEL文件名     sSheetName:Sheet表名
'返回值:把EXCEL变为2维数组返回
'========================================
Function QTP_ReadExcel(sFileName,sSheetName)
       Dim oExcel
       Dim oSheet
       Dim oRange
       Dim arrRange

       On Error Resume Next
      ' 创建Excel应用程序对象
       Set  oExcel = CreateObject("Excel.Application")
              If err.Number <> 0 Then
                     MsgBox "未能初始化Excel" & vbCrLf & "请确保Excel已安装", vbCritical
                     Exit Function
              End If
       On Error GoTo 0

       On Error Resume Next
      ' 打开Excel文件
       oExcel.Workbooks.Open(sFileName)
        If err.Number <> 0 Then
               MsgBox "未能加载Excel文件" & vbCrLf & "请确保Excel文件路径正确或格式正确", vbCritical
               Exit Function
        End If
       On Error GoTo 0

       ' 获取表格的使用范围
       Set  oSheet = oExcel.Worksheets(sSheetName).UsedRange
      ' 获取从A列到Z列,从第1行到第1000行的范围i中的所有值
       Set  oRange = oSheet.Range("A1:Z1000")
      '把Excel数据转换到数组
       arrRange = oRange.Value
      ' 关闭工作簿
       oExcel.WorkBooks.Item(1).Close

       ' 退出Excel
       oExcel.Quit
       Set  oExcel = Nothing
       ' 返回包含Excel数据的数组
       QTP_ReadExcel = arrRange
End Function
再贴上调用方法: 
假设表格如下,
要使用D2,则为arrExcel(2,4)
要使用A10,则为arrExcel(10,1),应该找出规律了吧。
我一般用此函数进行参数化和配置的操作,将需要测试的数据写在Excel中,在运行QTP时,会进行读取Excel中数据来进行测试。也会将一些配置写入Excel中,如用1和0表示是否,来进行是否重启IE、是否写Log等动作的控制,也可以写入数字,来控制脚本的运行次数,个人感觉挺方便的。
还是不太喜欢使用QTP自带的DataTable,一来是觉得多台测试机的情况下,每台都要配置比较麻烦,二来是担心一些配置会影响脚本。

比较:

一是通过在QTP的Data Table中直接导入脚本运行后表中数据一直都保存在action表中。
二是直接在运行中引用外部的excel表。且其中第一种方法xlsx格式是不识别的,运行结束后不会写入到action表中。也可使用importsheet函数实现;其中第二种方法是比较常用的。


TAG:

 

评分:0

我来说两句

Open Toolbar