Excel からデータをインポート、読み取り、変更する方法 QTP/UFT
⚡ スマートサマリー
Excel からデータをインポート、読み込み、変更する QTP/UFT これは組み込みの DataTable オブジェクトに依存しており、ワークブックをランタイム データ テーブルに読み込むことで、すべての自動化スクリプトがスプレッドシートの行からテスト ステップを実行できるようになります。

スプレッドシートは、テスターが入力値、期待される結果、および環境設定を保存する最も一般的な場所であり続けている。 QTP現在は販売されています OpenText UFT 製品がHPからMicro Focusに移り、その後 OpenTextは、DataTable オブジェクトを介してこれらのスプレッドシートを読み込みます。以下のセクションでは、ワークブックのインポート、行数のカウント、個々のセルの読み取り、値の変更、およびシートのディスクへの書き込みに使用される具体的なステートメントを示します。
EXCEL からデータをインポート、読み取り、変更する手順
次のものをインポートしたいとします。 売上.xls ワークブックをテストに取り入れてください。
ファイルがインポートされると UFT最上行が列ヘッダーになるため、それに合わせてデータを構成してください。 1行目の内容はテストデータではなくパラメータ名として扱われ、残りの行はすべてデータ行としてカウントされます。
Excelファイル全体をインポートするための構文を以下に示します。
DataTable.Import(FileName)
この場合、ステートメントは次のようになります。VBScriptでは、メソッドをステートメントとして呼び出す際に括弧は不要なので、ここでは括弧なしの形式を使用します。
DataTable.Import "D:\Automation\Sales.xls"
実行後、インポートされた行は、ワークブックに記述されていたとおりに、実行時のデータペインに表示されます。
特定のシートをインポートするための構文を以下に示します。 SheetSource ワークブック内のシートと SheetDest は、実行時データテーブル内の宛先シートです。
DataTable.ImportSheet FileName, SheetSource, SheetDest
行数を取得する シート内のデータ行数を取得するメソッド。各ステートメントはそれぞれ別の行に記述する必要があります。
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
表示されるメッセージボックスには、インポートされたシートの行数の合計が表示されます。
ポインタを特定の行に移動するには、 SetCurrentRow メソッド。2 番目の引数 DataTable.Value これはシート番号であって行番号ではないため、行ポインタは別途移動する必要があります。
DataTable.Import "D:\Automation\Sales.xls" ' In the code below, 1 is the sheet number DataTable.SetCurrentRow 1 Row1 = DataTable.Value("Year", 1) DataTable.SetCurrentRow 2 Row2 = DataTable.Value("Year", 1) MsgBox "Year Row 1 = " & Row1 & " Year Row 2 = " & Row2
どちらの値も同じ列から読み取られますが、行は異なります。メッセージボックスにはそれらが並べて表示されます。
値 代入の左側のメソッドを使用して、インポートしたシートのデータを変更します。変更は、メソッドを呼び出すまでメモリに保持されます。 エクスポートこれは、実行時データテーブルをExcelファイルに書き戻します。
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
編集されたセルは、代入処理の実行直後に実行時データペインに表示されます。
エクスポートされたワークブックを開くと、変更された値が実行中のみ保持されるのではなく、ディスクに保存されていることが確認できます。
💡ヒント: インポートしたファイル名とは異なるファイル名でエクスポートしてください。同じ開いているワークブックに書き戻すと、共有違反が発生し、実行結果が失われる可能性が最も高くなります。
Excelデータの読み取り、変更、エクスポート方法:完全な例
上記のコードスニペットはそれぞれ1つの方法を示しています。実際のデータ駆動型テストでは、これらを組み合わせて、各行を走査し、何らかの計算を行い、結果を保存し、シートをエクスポートする単一のループを作成します。ワークブックを想定 売上.xls 以下の4つの列と3つのデータ行が含まれています。
| 年 | 地域 | 我が軍の部隊数 | 価格 |
|---|---|---|---|
| 2023 | 東 | 120 | 25 |
| 2024 | 東 | 150 | 25 |
| 2025 | ウェスト | 200 | 30 |
以下のスクリプトは 歳入 列にデータを入力した後、行ごとにデータを入力し、累計値を記録し、完成したシートを新しいファイルに書き込みます。 AddParameter この関数は、ソースブックにその列が存在しないため使用されます。既に存在する列に対してこの関数を呼び出すとエラーが発生します。
' Read, calculate and export Excel data in UFT One Dim sh, rowCount, i, units, price, revenue, total DataTable.Import "D:\Automation\Sales.xls" Set sh = DataTable.GetSheet(1) sh.AddParameter "Revenue", "" rowCount = sh.GetRowCount Print "Total rows imported: " & rowCount total = 0 For i = 1 To rowCount DataTable.SetCurrentRow i units = DataTable.Value("Units", 1) price = DataTable.Value("Price", 1) revenue = CInt(units) * CInt(price) DataTable.Value("Revenue", 1) = revenue total = total + revenue Print "Row " & i & " | Year: " & DataTable.Value("Year", 1) & _ " | Region: " & DataTable.Value("Region", 1) & _ " | Revenue: " & revenue Next Print "Grand Total Revenue: " & total DataTable.Export "D:\Automation\Sales_Revenue.xls" Set sh = Nothing
出力:
Total rows imported: 3 Row 1 | Year: 2023 | Region: East | Revenue: 3000 Row 2 | Year: 2024 | Region: East | Revenue: 3750 Row 3 | Year: 2025 | Region: West | Revenue: 6000 Grand Total Revenue: 12750
この脚本の中で、他のどの点よりも重要な点が3つあります。まず、 GetRowCount ヘッダー行が列名として消費されるため、4ではなく3を返します。次に、 SetCurrentRow は各イテレーションの先頭で呼び出されます。これがないと、3 つのイテレーションすべてが同じ行を読み取ってしまいます。3 番目に、データ テーブルから出力される値は文字列なので、 CInt 乗算の前に適用され、算術演算ではなく文字列連結が行われるのを防ぎます。スキップping DataTable.Export 計算された収益はデータペインには表示されますが、ディスク上のどのファイルにも保存されません。
DataTable オブジェクトと Excel COM オブジェクトの比較 UFT
DataTableオブジェクトは、スプレッドシートにアクセスする唯一の方法ではありません。 UFT スクリプトは、 Excel.Application COMオブジェクトとExcelを直接操作する方法。この2つのアプローチは、それぞれ異なる問題を解決する。
| 側面 | DataTableオブジェクト | Excel COM オブジェクト |
|---|---|---|
| Excelのインストール | 実行マシンでは不要 | Microsoft Excelがインストールされている必要があります |
| 話し方のスタイル | 列名と行ポインタによる | セル座標、範囲、または名前付き範囲による指定 |
| 反復 | 行はテストの反復を自動的に実行します | 反復へのリンクはありません。ping 手動 |
| 書式設定と数式 | 無視されます。値のみが読み取られます。 | 数式、色、グラフへのフルアクセス |
| 複数のワークブック | 実行時テーブルは1つ、シートは一度に1つずつインポートされます。 | 同時に開くワークブックの数は任意です。 |
| 結果報告 | 値は UFT 結果を自動的に実行 | 自分で報告しない限り、何も記録されません |
| 清掃の負担 | 担当 UFT | すべてのオブジェクトを閉じ、終了し、解放する必要があります。 |
実用的なルールは単純です。DataTable オブジェクトを使用して、各スプレッドシート行が 1 つの反復になります。 自動化テスト 実行してください。数式の結果の読み取り、書式付きレポートの作成、同じスクリプト内での 2 つのワークブックの比較など、データ テーブルでは表現できない処理が必要な場合にのみ、COM オブジェクトに切り替えてください。以下の例では、1 つのセルを読み取り、ステータスを書き戻し、Excel を適切にシャットダウンします。
Dim xlApp, xlBook, xlSheet, cellValue Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Open("D:\Automation\Sales.xls") Set xlSheet = xlBook.Worksheets("Sheet1") cellValue = xlSheet.Cells(2, 1).Value Print "Cell A2 contains: " & cellValue xlSheet.Cells(2, 5).Value = "Reviewed" xlBook.Save ' Release everything, in this order xlBook.Close False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing
出力:
Cell A2 contains: 2023
セル A2 には 2023 が格納されています。これは、ワークシートの 1 行目がヘッダー行であり、列 A が 年COM アドレス指定は 1 ベースでヘッダーをカウントしますが、 DataTable.SetCurrentRow 1 最初のデータ行を指し示します。
Excelを使用する際によくあるエラー UFT そしてそれを修正する方法
ほとんどのExcelの問題は UFT これらは、繰り返し発生する少数のミスから生じるものです。それらを認識することで、デバッグ時間を大幅に節約できます。
⚠️ 警告: COM オートメーションで最も一般的な副作用は、孤立した EXCEL.EXE プロセスが発生することです。 CreateObject("Excel.Application") 一致しない Quit さらに Set … = Nothing 隠れたExcelインスタンスが実行状態のままになります。数百回のテスト実行後、実行マシンのメモリが不足し、ソースブックが編集不能になります。
- Excelはメモリ上に保持されます。 ワークブックを閉じて、
xlApp.Quit次に、シート、ワークブック、アプリケーションのオブジェクトをこの順序で解放します。アプリケーションを最初に解放することで、有効な参照が残り、プロセスがアクティブな状態を維持します。 - 変更内容は実行後に消えます。
DataTable.Value実行時データテーブルにのみ書き込みます。DataTable.Exportファイルシステムには何も到達しません。 - 「列が存在しません」または無効なパラメータエラー。 渡された列名
DataTable.Value末尾のスペースを含め、ヘッダーセルと完全に一致する必要があります。AddParameter書き込みを行う前に、列を作成する。 - どの反復処理でも同じ値が読み取られます。
SetCurrentRowループ内では呼び出されなかったため、行ポインタは移動しなかった。 - 1行ずれもカウントします。
GetRowCountヘッダー行は除外されます。ヘッダー行と10件のレコードを含むワークブックの場合、11ではなく10が返されます。 - パスと権限に関するエラー。 ハードコードされたパスなど
D:\Automation\Sales.xls他のマシンでは動作しません。環境変数からパスを構築して、すべてのエージェントで同じスクリプトが実行されるようにします。 - セルが結合され、ヘッダー行が複数あります。 インポート処理では、一意の名前を含むヘッダー行が正確に1行必要です。セルが結合されている場合、パラメータ名が空白になったり、重複したりします。
- 輸出に関する共有違反。 宛先ファイルは Excel で開けません。
Export実行中。先に閉じるか、タイムスタンプ付きのファイル名でエクスポートしてください。
COM のクリーンアップをラップすることは便利な習慣です。 On Error Resume Next ブロックは専用の回復機能に配置されているため、スクリプトの途中でエラーが発生しても Excel はシャットダウンします。 テストケース リポジトリの場合、結果にも同じ手順が適用されます。一度エクスポートし、ファイルが存在することを確認してから、実行に添付します。
ここで触れたトピックをさらに深く掘り下げるには、全文を読んでください。 QTP/UFT チュートリアル より広い枠組みについては、結果を ALMから UFT基本事項を確認する ソフトウェアテスト、そしてそのアプローチをデータ駆動型スクリプトと比較します。 Selenium.






