2016-04-20 14 views
2

テストケースのデータを含むExcelシートがあり、各テストケースは、スクリプトIDというカラム値で区切られており、スクリプトID = 1のローのみをロードしたい。この方法としてDataTable.ImportSheetメソッドでこれを達成する方法スクリプトID = 2と3のすべての行をインポートする条件に基づいてexcelからUFTにデータをインポートする方法

私もquery stringを試してみるとうまくいきますが、これをDataTable.ImportSheet方法(プロジェクトの制約) アマン

答えて

1

まあ、DataTable.ImportSheet方法は、単純に全体のシート(Excelファイルから一つのタブ/シート)をインポートし

感謝。限り、私は知っている、それはあなたのいくつかの行をインポートすることはできません。しかし

...

あなたが唯一の希望の行を処理するために、あなたのコードを設定することができます。自動ではなくプログラムでループを制御したい場合は、最初にOneIterationのみを実行するようにアクション(またはテスト)を設定します。アクションが「すべての行で実行」に設定されている場合は、シートの最後の行が何かデータであるかどうかを確認してから、その繰り返しを実行します。したがって、最初の4行にデータがあり、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で使用するために)単にでXを持っている「データ」と呼ばれる列を含めることですその行にデータシートデータが含まれている場合私は文字通り他の数式や計算(データ作成用のもの)、コメント、リストなどを含む行間の任意のものに置くことができます。手でループを制御するので無視されます。

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 
+0

だから、基本的に、あなたはシートを開き、データテーブルに直接書き込むことによってQTPのDataTableのに-relevant-データをコピーするために、Excelのオートメーションオブジェクトを使用しています。これはすばらしいことです。完了したらDataTableをエクスポートすると、カスタマイズされたバージョンのデータシートが作成されるためです。したがって、すべてのものを関数ライブラリにカプセル化して、テストを適切に開始する前にQTPのデータシートをプリロードすることができます。明らかに高度なテクニック:) –

関連する問題