QTP DataTable全攻略(1)

上一篇 / 下一篇  2009-07-27 00:14:16 / 个人分类:qtp

下面的代码可能有点乱,基本涉及到常用的datatable操作,所以个人全攻略1,是还有内容有待研究。

如果要一起研究的,复制粘贴下就可以了,只要新增一个action2.在action1上附加一个新的命名为action2

希望朋友们都一起发表下言论,我们一起研究下.

Acion1:

RunAction "action2", oneIteration
'-------------------------------------- 定义变量 ---------------------------------------------------------------------------------------------------------------
Dim getvalue,getvalue2,getvalue3,getvalue4,getvalue6,getvalueforow
Dim CountRunTimeRowByGlobal,CountRunTimeRowByAction
getvalue = 111
getvalue2=222
getvalue3=333
getvalue4=444
getvalue6=666
'-------------------------------------- 在DataTable里增加新列 GetValue ,并赋值--------------------------------------------------------------
DataTable.GlobalSheet.AddParameter  "GetValue",getvalue
DataTable.GlobalSheet.AddParameter  "GetValue2",getvalue2
DataTable.GlobalSheet.AddParameter  "GetValue3",getvalue3

DataTable.LocalSheet.AddParameter    "GetValue4",getvalue4

'-------------------------------------- 在DataTable里增加新行 并赋值 -----------------------------------------------------------------------------
DataTable.GetSheet("Action1").SetCurrentRow(2) 
'必须使用上面那句才能新增行,不然会被原值替代。最后getcurrentrow的时候就还是1行了.
DataTable.Value("GetValue4","Action1") = 777                             '或者DataTable.Value(1,2)=777

'---------------------------------------获取DataTable 中指定sheet运行时的动态列数------------------------------------------------------
CountRunTimeRowByGlobal = datatable.GetSheet("Global").GetParameterCount
CountRunTimeRowByAction = datatable.GetSheet("Action1").GetParameterCount
'msgbox CountRunTimeRowByGlobal
'msgbox CountRunTimeRowByAction
'wait 7
'这个地方我补充一下,如何即使是在调试过程中尝试操作过其本身的A,B或者其他列,QTP会记住的
'你只要运行过一次,即使没有给这些列赋值,他读出来的列就不止你新增的列数了,而且如果是在gloab
'中,还会循环运行的。这个问题我也还在研究中,尝试过edit 在format但是好像不管用,最后没办法只
'有把代码拷贝出来到新的action中运行.

'--------------------------------------- 获取DataTable 中指定列的值 ----------------------------------------------------------------------------------
msgvalue =  DataTable("GetValue2",GlobalSheet)
'msgbox msgvalue
'还可以读取其他action中指定列的值哦
msgvalue2  = DataTable("ToValueForAction2","action2")
'msgbox msgvalue2
'另外一种写法,这样就是读取Action2的第一列,不管第一列叫什么名字,都能读
'msgvalue2 = DataTable(1, Action2)
'这个引申的应用:循环读取action2的10列
'For i = 1 To 10
'        MsgBox DataTable(i, "Action2")
'Next
'同样,表也可以用数字代替
'msgvalue2 = DataTable(1, 2)
'msgbox msgvalue2

'这个地方我补充一下,获取的时候如果要保持两个Action读取的行数一致,必须使用下面两种方法.

'1.直接定位action2的行.  
'DataTable.GetSheet("Action2").SetCurrentRow(2)

'2. 使用变量传递保持行数一致
'CurrRow = DataTable.GetSheet("Action1").GetCurrentRow
'DataTable.GetSheet("Action2").SetCurrentRow(CurrRow)


'--------------------------------------- 获取DataTable 中指定行的值 ---------------------------------------------------------------------------------------------
'wait 5
getbyrow = DataTable.GetSheet("Action1").GetParameter("GetValue4").ValueByRow(2)
msgbox getbyrow


'--------------------------------------- 获取DataTable 中当前列和设置当前列 ------------------------------------------------------------------------------
CurrRow = DataTable.GetSheet("Action1").GetCurrentRow
'msgbox CurrRow
DataTable.GetSheet("action2").SetCurrentRow(5)
'增加action2的列数,跟行数的计算没有关系
DataTable.GetSheet("action2").AddParameter  "GetValue6",getvalue6
CurrRow2= DataTable.GetSheet("action2").GetCurrentRow
'msgbox CurrRow2


'---------------------------------------获取得到datatable总行数的命令-------------------------------------------------------
AllRowCount = DataTable.GetSheet("Action1").GetRowCount
msgbox AllRowCount


'---------------------------------------sheet级操作(增加sheet)-----------------------------------------------------------------------
Dim Variable
Variable = DataTable.AddSheet ("MySheet").AddParameter("Time", "8:00")


'---------------------------------------sheet级操作(删除sheet)-----------------------------------------------------------------------
'DataTable.DeleteSheet "MySheet"

'--------------------------------------- 保存 datatable--------------------------------------------------------------------------------------
DataTable.Export("c:ControlDataTable.xls")


'--------------------------------------- 保存datatable中 sheet--------------------------------------------------------------------------------------
DataTable.ExportSheet "C:ControlDataTable.xls" , 4

'说明三点: 1.  其实这个地方也可以使用sheet名称的,但是我以运行就debugger死了,用sheet的index就不会
       '2.  如果当前文件存在,但是该文件不包含具有指定工作表名称的工作表,则将插入该工作表作为文件的最后一个工作表。 
          '3 .  如果当前文件存在且包含指定工作表,则导出的工作表将覆盖现有工作表。


'--------------------------------------- 统计datatable中sheet个数 --------------------------------------------------------------------------------------
SheetCount = DataTable.GetSheetCount
'msgbox SheetCount


'---------------------------------------- 导入 datatable-------------------------------------------------------------------------------------------------------
DataTable.Import ("c:ControlDataTable.xls")


'---------------------------------------- 导入datatable中指定 sheet-------------------------------------------------------------------------------------------------------
DataTable.ImportSheet "c:ControlDataTable.xls" ,2 ," Action1"
wait 10
'导入的工作表中的列标题必须与工作表导入操作中的数据表参数名匹配。否则,测试或组件可能会失败。
 '导入的工作表会自动采用它所替换的工作表的名称。
'如果导入的 Excel 工作表包含组合框或列表单元格、条件格式或其他特殊单元格格式,则不会导入这些格式,并且单元格在数据表中显示时包含固定值。
'DataTable.ImportSheet(FileName, SheetSource, SheetDest)
'FileName  字符串型  要从中导入工作表的 Excel 表的完整路径。 
'SheetSource  变量  要从文件导入的工作表的名称或索引。索引值从 1 开始。 
 'SheetDest  变量  数据表中要用 SheetSource 替换的工作表的名称或索引。索引值从 1 开始。 

Action2:

msgbox "Geted successful"
getvalue = 5
DataTable.GetSheet("action2").AddParameter  "ToValueForAction2",getvalue
'wait 7

原文地址:https://www.cnblogs.com/edwardsun/p/3431407.html