QTP之Excel的调用

上一篇 / 下一篇  2013-04-01 14:54:12 / 个人分类:QTP自动化测试

  在调试备案流通节点的脚本时,每次都要去数据库删数据,或者去直接调整datatable里面的数据,发现特别麻烦。由于数据库表很多,每个表之间的关系也比较复杂,在数据库中删除数据的时候一不小心就删错了。改datatable的数据也很不方便,可能有的改了有的没改,影响脚本的运行。
   解决方法:把数据存储在外部Excel文件中,然后通过调用Excel文件去读取里面的数据。但如何去调用excel文件中的数据呢:
   一、把Excel文件中的数据先转化或一个二维数组,然后去调用这个二维数组
Function ReadFile(sFileName,sSheetName)
       Dim oExcel
       Dim oSheet
       Dim oRange
       Dim arrRange
 
       On Error Resume Next
           ' 创建Excel应用程序对象
              Set Excel = 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 Sheet = oExcel.Worksheets(sSheetName).UsedRange
       ' 获取从A列到Z列,从第1行到第1000行的范围i中的所有值
       Set Range = oSheet.Range("A1:Z1000")
       '把Excel数据转换到数组
       arrRange = oRange.Value
       ' 关闭工作簿
       oExcel.WorkBooks.Item(1).Close
       ' 退出Excel
       oExcel.Quit
       Set Excel = Nothing
    ' 返回包含Excel数据的数组
     ReadFile = arrRange
End Function
 缺点:实现的代码量比较多,行列比较多时每行每列的数据很难再数组中确定
  二、把excel文件通过手工或自动导入datatable中,然后通过调用datatable中相关方面来进行调用
    (1)手动添加:通过在“file>settings>resource”中添加外部excel文件,我们可以将该外部数据文件作为data table使用。且不会在默认的Defualt.xls中存储。
     (2)第一种方法:手动将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


第二种方法:直接编写脚本,使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

两种方法比较:
第一种方法是通过在QTP的Data Table中直接导入脚本运行后表中数据一直都保存在action表中。
第二种方法是直接在运行中引用外部的excel表,且xlsx格式的不识别,运行结束后不会写入到action表中。也可使用importsheet函数实现
三、利用EOM模型直接对excel中的数据进行调用
Dim fso, filePath, i
Dim ExcelBook, ExcelSheet, myExcelBook, myExcelSheet
Dim celldata
'指定参数文件路径
filePath = "C:\Documents and Settings\Administrator\桌面\Mysheet.xls"
 
Set fso = CreateObject("Scripting.FileSystemObject")
Set ExcelBook = CreateObject("Excel.Application")
Set ExcelSheet = CreateObject("Excel.Sheet")
Set myExcelBook = ExcelBook.WorkBooks.Open(filePath)
Set myExcelSheet = myExcelBook.WorkSheets("Global")
celldata =  MyExcelSheet.Cells(1,14)
For i = 2 to  celldata
   NodeName = myExcelSheet.Cells(i,1)
       Msgbox NodeName
NodeType = myExcelSheet.Cells(i,2)
NodeAreaCode = myExcelSheet.Cells(i,8)
Browser("肉类蔬菜流通追溯业务系统").Page("肉类蔬菜流通追溯业务系统").Frame("mainFrame").WebEdit("nodeName").Set  NodeName
Browser("肉类蔬菜流通追溯业务系统").Page("肉类蔬菜流通追溯业务系统").Frame("mainFrame").WebList("nodeTypeId").Select  NodeType
……
 myExcelSheet.Cells(i,12)= "通过"
ExcelBook.ActiveWorkbook.Save
MyExcelBook.close
Set  MyExcelSheet = Nothing
 ExcelBook.Quit
 Set ExcelBook = Nothing
优点:调用起来更简单,直接,更改数据也比较方便,这样可以更好的利用excel的相关函数和统计功能。

 
 

TAG:

 

评分:0

我来说两句

Open Toolbar