51Testing软件测试论坛

标题: 如何从EXCLE中取值 [打印本页]

作者: johnnyleeliv    时间: 2010-11-1 23:34
标题: 如何从EXCLE中取值
大纲编写基本都是用EXCLE,有哪位高手知道如何使用参数化从测试大纲的EXCLE中取值作为用例执行的输入值?
作者: TIB    时间: 2010-11-2 20:23
可以通过ADO读取Excel数据,也可以通过COM接口访问和读取Excel单元格,例如:

Function ReadFile(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数据的数组
     ReadFile = arrRange
End Function
作者: johnnyleeliv    时间: 2010-11-4 07:40
十分感谢,本人调试了一个下午也没有成功,能否给个例子,其中sFileName应该是EXCLE的文件名还是路径?sSheetName应该是sheet页的名称吧?另外可否详细介绍下ADO和COM接口访问读取EXCLE值,另外是否有相关资料可以提供,万分感谢!
作者: feiyunkai    时间: 2010-11-4 09:40
标题: 代码如下:
本帖最后由 feiyunkai 于 2010-11-4 18:08 编辑

COM接口 :
Set  excelApp =  CreateObject("Excel.Application")
Set  newBook = excelApp.Workbooks.open(excelpath) 'excelpath为EXCEL路径
For i= 1 to 10000 '若第N行是用例起始行,则修改为for i=N to 10000 ,10000是任意一个大于用例总数的数字
CaseName=newBook.WorkSheets(SheetName).Cells(i,j) 'SheetName是用例所在Sheet,i是用例所在行,j是用例所在列

      if CaseName<>"" then
             print  CaseName  
    Else
           exit for
      End if
Next
excelApp.Workbooks.Close
excelApp.Quit
Set  newBook=nothing
Set  excelApp =nothing
ADO接口:
Set conn= createobject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&excelpath&";Extended Properties=Excel 8.0"    'EXCEL97-2003,excelpath为EXCEL所在路径
'conn.Open "Provider=Microsoft.Jet.OLEDB.12.0;Data Source="&excelpath&";Extended Properties=Excel 12.0"  'EXCEL2007要安装OLEDB12.0不然会报错
Set rs=CreateObject("ADODB.Recordset")  '创建记录集
rs.Open "Select CaseName from [Sheet1$] ",conn 'SQL语句查询所有用例,CaseName 为用例所在列的列名,[Sheet1$]为用例所在Sheet
Do
If not rs.eof Then
        CaseName=rs("CaseName")  
        print "用例名称:"&CaseName
        rs.MoveNext
else
        print "没有用例"
End If
loop until rs.eof=true
conn.close
Set rs=nothing
Set conn = nothing

'若调试未通过,可以MSN给我发信息,相互学习!我的MSN:yunkai614221@live.cn
作者: johnnyleeliv    时间: 2010-11-6 11:28
十分感谢,COM口的我已经调试成功,谢谢!




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