如何根据条件将数据从excel导入UFT

时间:2016-04-20 10:27:17

标签: excel hp-uft

我有一个excel表,其中包含测试用例的数据,每个测试用例由列值分隔,例如脚本ID,我只想加载脚本ID = 1的行。我们如何使用DataTable.ImportSheet方法实现此目的,因为此方法导入所有具有脚本id = 2和3的行

我也尝试查询字符串,这工作正常,但我想通过DataTable.ImportSheet方法(项目约束)来实现这一点

由于 阿曼

3 个答案:

答案 0 :(得分:2)

您也可以先手动创建数据表。

例如,

Set myxl = createobject("excel.application")
myxl.Application.Visible = true
myxl.Application.DisplayAlerts = false
myxl.Workbooks.Open DataSheetFilePath
set sheet = myxl.ActiveWorkbook.Worksheets("SheetName")
Row=sheet.UsedRange.Rows.Count
Col=sheet.UsedRange.Columns.Count
'Create Data table first
Datatable.AddSheet ("DataTableName")
Set ParameterTable = datatable.GetSheet("DataTableName")
'Add cols from Excel
For j = 1 To Col
    ParameterTable.AddParameter sheet.cells(1,j).value,""
Next

'Begin search in Excel
'Suppose the ID column will be 1
DataTableRow = 1
For i = 1 to Row
    If sheet.cells(i,1).value = 1 Then
        'Add row record to datatable
         ParameterTable.SetCurrentRow (DataTableRow)
         For j = 1 to Col
         ColName = sheet.cells(1,j).value
         Val = sheet.cells(i,j).value
         datatable.Value(ColName,"DataTableName") = Val
         DataTableRow = DataTableRow+1
         Next
    End If
Next

答案 1 :(得分:1)

嗯,DataTable.ImportSheet方法只是导入整个工作表(excel文件中的一个选项卡/工作表)。据我所知,它不允许你只导入它的一些行。

...然而

您可以将代码设置为仅处理所需的行。您需要以编程方式而不是自动控制循环,因此首先:将您的操作(或测试)设置为仅运行OneIteration。如果操作设置为“在所有行上运行”,那么它只会查看工作表中包含任何数据的最后一行是什么,然后运行那么多次迭代。因此,如果您有一个包含前四行数据的工作表,以及第100行的一些数据,那么即使数据为空,QTP也会尝试运行100次迭代。

要设置操作的迭代设置,可以右键单击流程图中的操作,然后选择“操作调用属性”。要为整个测试设置迭代,请右键单击Start椭圆,选择属性,选择Run,然后在那里找到设置。

接下来,创建一个类似于此的循环:

'ImportedSheetTabName = the name of the tab in Excel, you specified it during importsheet

for Row = 1 to DataTable.GetSheet(ImportedSheetTabName).GetRowCount

  DataTable.GetSheet(ImportedSheetTabName).SetCurrentRow Row

  if DataTable("script_ID",ImportedSheetTabName) = "1"  'based on your question
    'do stuff with the row
    'this is where you would put ALL of the work to be done...  
    'it can be as long as you need.
  else
    'do nothing.  this will ignore all rows that are not Script ID = 1
  end if

next

我在所有工作表(与QTP一起使用)中实际执行的操作是包含一个名为“data”的列,如果该行包含数据表数据,则该列中只包含一个X.我可以在行之间插入任何我想要的东西,包括其他公式和计算(数据构建的东西),注释,列表等等......并且知道所有这些都将被忽略,因为我手动控制我的循环。

答案 2 :(得分:0)

要从数据表中导入特定数据,可以按照以下步骤操作: -首先根据需要将数据从excel工作表导入到全局或特定操作表。 -在下一行中,使用一个变量,说var,它将保存其中的总行数。 -然后从所需的值到所需的值运行for循环。

代码可以如下:

datatable.importsheet "path where excel is stored" , 1, "Global or specific action data sheet"

这里1表示您正在从要导入的excel文件的第一张纸中获取数据

var = datatable.GetSheet("Global or action sheet").GetRowCount

for i = 1 to var(根据您的要求更改条件)

Datatable.SetCurrentRow(i)

现在,根据上述循环中i的值,您将使脚本迭代到您希望工作表运行的特定数据上。

希望这会有所帮助。