51Testing软件测试论坛

标题: QTP9.2-DataTable.ImportSheet读取问题 [打印本页]

作者: 153994730    时间: 2008-7-17 11:13
标题: QTP9.2-DataTable.ImportSheet读取问题
我用语句:
DataTable.importSheet "D:\TestResult.xls",1,4
执行会报错;
而用语句:
DataTable.importSheet "D:\TestResult.xls","LogChk",4
则可以成功执行完毕

这是为什么呀???希望高手指点!
具体报错信息见附件!

在线等ING...
作者: lingxin5013    时间: 2008-7-17 12:34
EXCEL表不能用数字代替 个人这么认为的 你不能加sheet吗
作者: 153994730    时间: 2008-7-17 13:00
DataTable.ImportSheet(FileName, SheetSource, SheetDest)


Argument
Type
Description

FileName  String  The full path of the Excel table from which you want to import a sheet.  
SheetSource  Variant  The name or index of the sheet in the file that you want to import. Index values begin with 1.  
翻译: sheetSource  变量类型  你想导入的文件中的sheet名,或序列号. 序列号值从1开始;
SheetDest  Variant  The name or index of the sheet in the Data Table that you want to replace with the SheetSource. Index values begin with 1.  
朋友...建议你看看QTP里的HELP文件吧
有谁能帮帮我啊.....苦呢啊
作者: lingxin5013    时间: 2008-7-17 15:51
你在试下 我实验了下是可以的
datatable.ImportSheet  "D:\PSCI项目\考生\9001系列.xls",1,2
作者: flying-kite    时间: 2008-7-17 15:54
没有问题啊,我用DataTable.importSheet "D:\TestResult.xls",1,1 运行成功!
作者: lingxin5013    时间: 2008-7-17 15:54
去检查下你的datatable表中是否有第4个sheet
应该是这个地方错了

你可以实验下DataTable.importSheet "D:\TestResult.xls",1,2
看看行不行 如果可以 就是因为你没有sheet
作者: lingxin5013    时间: 2008-7-17 15:56
他的代码有可能在datatable中没有第4个sheet 造成的提示! 我刚刚实验了下如果没有第4个sheet 就会报LZ的错误 .
作者: 153994730    时间: 2008-7-18 09:39
嗯..谢谢各位的指点...我试试看哈..
作者: 153994730    时间: 2008-7-18 09:55
55555555555好像还是不行啊....

DataTable.ImportSheet FileName, SheetSource, SheetDest

SheetSource  Variant  The name or index of the sheet in the file that you want to import. Index values begin with 1.
Sheet来源:    变量类型   你想导入文件中的Sheet名,或序号; 序号值从1开始;  

SheetDest  Variant  The name or index of the sheet in the Data Table that you want to replace with the SheetSource. Index values begin with 1.  
想要替换的Sheet(这里是个人感觉是指Run-Time DataTable中的Sheet)  变量类型  DataTable中, 你想要替换掉的Sheet名或其序号; 序号值也是从1开始计;

注:

现在我的问题不是出在SheetDest: 因为 当我用语句: DataTable.ImportSheet "D:\TestResult.xls","LogChk",4 时是完全没有问题的(SheetDest不管是2,或4都是OK的)
而当我将SheetSource从Sheet名,改为其序号就开始报错了;因此个人判断,问题不出在第3个参数,问题还是第2个参数,为啥我就不能用序号呢,好奇怪哈

继续啊...高手来指点啊....迷茫ING...
作者: flying-kite    时间: 2008-7-18 10:21
那你再新建一个excel文档,不改sheet名,看看DataTable.ImportSheet "D:\TestResult.xls",1,4
作者: 153994730    时间: 2008-7-18 10:43
总算有点眉目了....好像是和我参数有关

直接用: DataTable.ImportSheet "D:\test.xls",1,4  可以

而我如果这样做:
      Dim SheetNum
      SheetNum = 1

       DataTable.ImportSheet "D:\test.xls",SheetNum,4
   就会报错

  请问得用啥类型才能接受1个整型变量值呀...
作者: 153994730    时间: 2008-7-18 11:00
我把我代码贴上来算了:
先看被调用的Action -> LoginChk
Dim DataPath, SheetNum

DataPath = Parameter.Item("DataPath")'String类型
SheetNum = Parameter.Item("SheetNum")'String类型
print SheetNum
print DataPath

DataTable.ImportSheet DataPath,SheetNum,2

Dim LogName,Password,Expresult,ActResult,CaseNum,ActNum

CaseNum = 0

ActNum = DataTable.GetSheet(2).GetRowCount
print ActNum
While CaseNum<ActNum
     LogName = DataTable.RawValue("LoginName",2)
     Password = DataTable.RawValue("Password",2)
     ExpResult = DataTable.RawValue("ExpRslt",2)
         
     Dialog("Login").WinEdit("Agent Name:").Set LogName
     Dialog("Login").WinEdit("Password:").Set Password
    ' print LogName
     ' print Password
     Dialog("Login").WinButton("OK").Click
         
   If Dialog("Login").Dialog("Flight Reservations").Exist Then
       ActResult = Dialog("Login").Dialog("Flight Reservations").Static("Password must be at least 4 characters long").GetROProperty("text")
       Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click
   else
           Window("Flight Reservation").WaitProperty "visible", True, 10000
           ActResult = Window("Flight Reservation").GetROProperty("text")
   End If
         
         
     If ExpResult = ActResult Then
                 DataTable.Value("PassOrNot",2)="PASS"
                 DataTable.Value("ActResult",2)=ActResult
          Reporter.ReportEvent micPass, "LoginChk", "LoginChk is OK"
                 Else
                 DataTable.Value("PassOrNot",2)="Failure"
                 DataTable.Value("ActResult",2)=ActResult
                   Reporter.ReportEvent micFail, "LoginChk", "LoginChk is Not Ok"
         End If
'
   
     DataTable.SetNextRow
         CaseNum = CaseNum+1
Wend


  Parameter.Item("CaseNum")=CaseNum

  DataTable.ExportSheet DataPath,2
作者: 153994730    时间: 2008-7-18 11:04
再看我的主调Action-> TestMain

Dim DataPath,SheetInitNum,SheetNum,InitFlag,CaseNum
DataPath = "D:\TestResult.xls"
SheetNum = 1
RunAction "TestInit [TestInit]", oneIteration,InitFlag  'InitFlag是用来判断初始化Action成功与否的,若成功的话就能读到值,不会是空的,可以调用登录检查模块进行测试;

If InitFlag <>"" Then
               RunAction "LoginChk [LoginChk]", oneIteration,DataPath,SheetNum,CaseNum
        print CaseNum
End If
作者: 陈能技    时间: 2008-7-18 11:47
把DataTable.ImportSheet DataPath,SheetNum,2改成:
DataTable.ImportSheet DataPath,CInt(SheetNum),2

然后再试试!
作者: 153994730    时间: 2008-7-18 13:13
非常感谢老师...哈哈..问题解决了...
作者: lingxin5013    时间: 2008-7-18 13:27
CInt这个方法是4舍5入 用在这个地方为什么可以 ??????
作者: zte_boy    时间: 2008-7-18 13:46
16楼,CInt无非是转换成int类型,在这里四舍五入有什么关系?都是整数的
作者: FLY000    时间: 2008-7-18 15:05
问下楼主,Reporter.ReportEvent micPass, "LoginChk", "LoginChk is OK"  这句的效果是什么
作者: zte_boy    时间: 2008-7-18 15:16
标题: 回复 18# 的帖子
这个是QTP在报告中加入消息的语句,你可以去查下QTP的帮助,看看怎么用的
作者: lingxin5013    时间: 2008-7-18 17:36
dim double1,double2
double1=526.5123
double2=526.4123
msgbox clnt(double1)
msgbox clnt(double2)
17楼自己运行自己看
作者: zte_boy    时间: 2008-7-19 10:26
标题: 回复 20# 的帖子
我明白你的意思,就是说CInt这个函数会进行四舍五入,我并没有否认这点啊
只不过在LZ的代码中
DataTable.ImportSheet DataPath,SheetNum,2
他的SheetNum无非是个sheet的index,他自己定义的参数,既然是index,也就不可能定义成小数(通常做法)
那么四舍五入在这也就没有了意义,怎么就不可以用呢?
一点问题也没有啊
作者: dalinangel    时间: 2008-7-21 18:04
好久没见过这么好的贴子啦!!!!!!

学到并感受到很多东西!
作者: lingxin5013    时间: 2008-7-22 09:19
学习~




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