shuishixingyu 发表于 2009-8-21 18:48:28

调用vbs脚本

vbs中函数
Function ReadFile(FileName,SheetName)
   Set oExcel = CreateObject("Excel.Application")      
   Set oSheet = oExcel.WorkSheets(SheetName).UsedRange
   Row = oSheet.Cells.Rows.Count
   Column = oSheet.Cells.Columns.Count
   For i = 1 To Row
   For j = 1 To Column
       arrRange = oSheet.Cells(i,j).Value
       ReadFile = arrRange
   Next
   Next
   oExcel.WorkBooks.Item(1).Close
   oExcel.Quit   
   Set oExcel = Nothing
End Function
在QTP中用arrRange = ReadFile()
msgbox arrRange
如果这么写只能显示Excel中最后一个值,请问有什么办法能在QTP中显示每个遍历到的值?

liujinkui 发表于 2009-8-21 21:02:32

Set oSheet = oExcel.WorkSheets(SheetName).UsedRange
这句是什么意思,我这里运行不了。

shuishixingyu 发表于 2009-8-22 10:08:18

获取表格的使用范围

lijinshui 发表于 2009-8-22 10:48:18

只取出最后一个是当然的呀,之前的都被你覆盖了

Function ReadFile(FileName,SheetName)
   Set oExcel = CreateObject("Excel.Application")      
   Set xlFile = oExcel.WorkBooks.Open(FileName)
   Set XlSheet = xlFile.Sheets(SheetName)
   Row = XlSheet.usedRange.Rows.Count

   Column =XlSheet.usedRange.Columns.Count
   For i = 1 To Row
   For j = 1 To Column
       arrRange = XlSheet.Cells(i,j).Value
           msgboxarrRange
       ReadFile = arrRange
   Next
   Next
   oExcel.WorkBooks.Item(1).Close
   oExcel.Quit   
   Set oExcel = Nothing
End Function

Dim arrRange,FileName,SheetName
FileName = "C:\test\11.xls"
SheetName="1"
arrRange = ReadFile(FileName, SheetName)

[ 本帖最后由 lijinshui 于 2009-8-22 10:59 编辑 ]

shuishixingyu 发表于 2009-8-23 11:39:10

在ReadFile函数中用 msgboxarrRange是可以显示每一个值,但是因为我这是在QTP中调用这个函数,我想知道有没有办法返回这些值,因为我还想在QTP中使用这些值

liujinkui 发表于 2009-8-23 13:51:31

回复 1# 的帖子

那就是你把Open EXCEL 的语句 漏掉了。是这样吗?

liujinkui 发表于 2009-8-23 14:09:50

我明白你的意思了。
你把EXCEL 导入到DATA Table 中不就可以了吗。
‘参数说明:pathFile-EXCEL文件的路径加文件名
'                  ETableSheet-EXCEL Sheet的标签名
'                  QTablesheet-QTP DATATABLE 的Sheet标签名
Public function importExcel(pathFile,ETableSheet,QTablesheet)

        Dim j, rowcount
        Datatable.ImportSheet pathFile,ETableSheet,QTablesheet
        rowcount=DataTable.GetSheet(QTablesheet).GetRowCount '返回数据行数
        importExcel=rowcount
End Function

调用:
countRow=importExcel("D:\userTable.xls","user","Action1")
For j=0 to countRow-1
         ...
        Dialog("XXX").Activate
         Dialog("xxxx").WinEdit("姓名").Set DataTable("姓名", dtLocalSheet)
         ...
         DataTable.SetNextRow
Next
注意:要把Test Settings 中Run->Data Table iterations 设置为 Run one iteration only

shuishixingyu 发表于 2009-8-23 19:23:31

importsheet 方法是可以的,我是想试试看能否直接使用Excel里的数据,而不需要先导到DataTable中再使用

lijinshui 发表于 2009-8-25 08:22:10

回复 8# 的帖子

可以啊,你查查Dictionary 的用法,可以解决你的问题
把数据是存到内存中,而且不需要事前知道数据的长度,直接读多少存多少

shuishixingyu 发表于 2009-8-25 21:42:26

请问应该怎么写?对dictionary不是很了解,只是知道add,items、keys这些方法,但是还不清楚怎么在这里用上

linhd030 发表于 2009-9-10 11:09:01

将所有数据全部显示出来,如下~~~嘎嘎

Dim fileArray(200,200),arraytest(500)
Dim str1

ReadFile "E:\1.xls","Global"
msgboxstr1
Function ReadFile(FileName,SheetName)
   Set oExcel = CreateObject("Excel.Application")
   Set oFile= oExcel.Workbooks.Open (FileName)
   Set oSheet = oFile.WorkSheets(SheetName).UsedRange
   Row = oSheet.Cells.Rows.Count
   Column = oSheet.Cells.Columns.Count
   For i = 1 To 5
   For j = 1 To 10
       arrRange = oSheet.Cells(i,j).Value
          
         fileArray(i,j) = arrRange

               str1 =str1&i&j&fileArray(i,j)&" "'将搜索到的数据全部显示出来
   Next
   Next
   oExcel.WorkBooks.Close
   oExcel.Quit   
   Set oExcel = Nothing
End Function
页: [1]
查看完整版本: 调用vbs脚本