Excel からデータをインポート、読み取り、変更する方法 QTP/UFT

⚡ スマートサマリー

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

  • 📥 インポート: DataTable.Importはワークブック全体を読み込みますが、DataTable.ImportSheetは指定されたシートを選択した宛先シートに読み込みます。
  • 🗂️ ヘッダールール: スプレッドシートの最初の行が列名になるため、インポートを実行する前にシートの構造を整えてください。
  • 🔢 行数: DataTable.GetSheet(1).GetRowCount は、ヘッダー行を除いたデータ行の数を返します。
  • 🎯 行ポインター: DataTable.SetCurrentRow を毎回読み込む前に呼び出すことで、DataTable.Value が期待どおりのセルを返します。
  • 会<XNUMXxEXNUMX><XNUMXxXNUMXF>️️<XNUMXxXNUMXF>️️ 返信してください: DataTable.Value に値を代入すると、メモリ上のセルのみが変更されます。DataTable.Export はシートをディスクに保存します。
  • 🧩 COMオプション: 書式設定、数式、または複数のブックを開く必要がある場合は、Excel.Application オブジェクトを作成してください。
  • ⚠️ 掃除: 必ず Quit 関数を呼び出してオブジェクトを解放してください。そうしないと、EXCEL.EXE が常駐し、ファイルをロックしてしまいます。

Excelからデータをインポート、読み取り、変更する方法 QTP/UFT

スプレッドシートは、テスターが入力値、期待される結果、および環境設定を保存する最も一般的な場所であり続けている。 QTP現在は販売されています OpenText UFT 製品がHPからMicro Focusに移り、その後 OpenTextは、DataTable オブジェクトを介してこれらのスプレッドシートを読み込みます。以下のセクションでは、ワークブックのインポート、行数のカウント、個々のセルの読み取り、値の変更、およびシートのディスクへの書き込みに使用される具体的なステートメントを示します。

EXCEL からデータをインポート、読み取り、変更する手順

次のものをインポートしたいとします。 売上.xls ワークブックをテストに取り入れてください。

Sales.xls ソースワークブックを Excel で開いてからインポートします UFT

ファイルがインポートされると UFT最上行が列ヘッダーになるため、それに合わせてデータを構成してください。 1行目の内容はテストデータではなくパラメータ名として扱われ、残りの行はすべてデータ行としてカウントされます。

Excelファイル全体をインポートするための構文を以下に示します。

DataTable.Import(FileName)

この場合、ステートメントは次のようになります。VBScriptでは、メソッドをステートメントとして呼び出す際に括弧は不要なので、ここでは括弧なしの形式を使用します。

DataTable.Import "D:\Automation\Sales.xls"

実行後、インポートされた行は、ワークブックに記述されていたとおりに、実行時のデータペインに表示されます。

輸入販売データ UFT 実行時データテーブルペイン

特定のシートをインポートするための構文を以下に示します。 SheetSource ワークブック内のシートと SheetDest は、実行時データテーブル内の宛先シートです。

DataTable.ImportSheet FileName, SheetSource, SheetDest

行数を取得する シート内のデータ行数を取得するメソッド。各ステートメントはそれぞれ別の行に記述する必要があります。

DataTable.Import "D:\Automation\Sales.xls"
row = DataTable.GetSheet(1).GetRowCount
MsgBox row

表示されるメッセージボックスには、インポートされたシートの行数の合計が表示されます。

メッセージBox インポートされた売上シートのGetRowCountの結果を表示します

ポインタを特定の行に移動するには、 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

どちらの値も同じ列から読み取られますが、行は異なります。メッセージボックスにはそれらが並べて表示されます。

メッセージBox データテーブルの1行目と2行目の「年」の値を比較する

代入の左側のメソッドを使用して、インポートしたシートのデータを変更します。変更は、メソッドを呼び出すまでメモリに保持されます。 エクスポートこれは、実行時データテーブルをExcelファイルに書き戻します。

DataTable.SetCurrentRow 1
DataTable.Value("Year", 1) = 2026
DataTable.Export "D:\Automation\Sales_Updated.xls"

編集されたセルは、代入処理の実行直後に実行時データペインに表示されます。

実行時データテーブルに、DataTable.Value メソッドによって更新されたセルが表示されます。

エクスポートされたワークブックを開くと、変更された値が実行中のみ保持されるのではなく、ディスクに保存されていることが確認できます。

エクスポートされたExcelファイルがExcelで開かれ、DataTable.Exportによって保存された変更された値が表示されます。

💡ヒント: インポートしたファイル名とは異なるファイル名でエクスポートしてください。同じ開いているワークブックに書き戻すと、共有違反が発生し、実行結果が失われる可能性が最も高くなります。

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.

よくあるご質問

UFT .xls、.xlsx、および.csvファイルをランタイムデータテーブルにインポートします。エクスポートでは常に.xlsワークブックが生成されるため、下流システムで新しい.xlsx形式が必要な場合は、コンバーターまたはExcel COMオブジェクトが必要です。

設計時テーブルはテストと共に保存され、変更されません。実行時テーブルは、実行開始時に作成されるコピーです。インポートと値の代入は実行時コピーのみに影響し、エクスポートされない限り破棄されます。

ワークブック自体を解析する DataTable オブジェクトの場合は「いいえ」です。CreateObject(“Excel.Application”) を呼び出すスクリプトの場合は「はい」です。なぜなら、この方法は実際の Excel インスタンスを自動化するため、Excel インスタンスが存在しないマシンではすぐに失敗するからです。

はい。ImportSheet関数はシートごとに1回ずつ、毎回異なる宛先シート名を指定して呼び出してください。グローバルデータはGlobalシートに、アクション固有の値は対応するアクションシートに配置することで、反復処理の独立性を維持します。

はい、ループの骨組みは通常正しいです。ただし、SetCurrentRow がループ内に配置されていること、および数値セルが CInt または CDbl を使用して変換されていることを手動で確認してください。生成されたコードでは、これら両方が省略されていることがよくあります。

現代のAI機能 UFT AIはコントロールを視覚的に認識するため、フィールド名を変更してもデータセットのすべての行が分割されることはなくなります。また、AIは追加の境界行を提案できるため、手動でテストを設計することなく、スプレッドシートのカバレッジを拡大できます。