如何根据条件将Excel中的数据导入到UFT

问题描述 投票:0回答:4

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

我也尝试使用查询字符串,效果很好,但我想通过 DataTable.ImportSheet 方法(项目限制)来实现这一点

谢谢 安缦

excel hp-uft
4个回答
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
投票

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

但是...

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

要设置操作的迭代设置,您可以右键单击流程图中的操作,然后选择操作调用属性。要设置整个测试的迭代,请右键单击“开始”椭圆形,选择“属性”,选择“运行”,然后在此处找到设置。

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

'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 一起使用)中实际做的是包含一个名为“数据”的列,如果该行包含数据表数据,则该列中只包含一个 X。我可以在行之间放入任何我想要的东西,包括其他公式和计算(数据构建的东西)、注释、列表等......并且知道所有这些都将被忽略,因为我手动控制循环。


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
(根据您的要求更改条件)

数据表.SetCurrentRow(i)

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

希望这有帮助。


0
投票

当我以这种方式导入数据时,报告仅识别一次迭代,这与我手动导入数据时不同,它可以正确识别迭代次数。

© www.soinside.com 2019 - 2024. All rights reserved.