次の方法で共有


Excel のファイルおよびテーブルをループ処理する方法

更新 : 2006 年 7 月 17 日

このトピックの手順では、Foreach ループ コンテナと適切な列挙子を使用して、フォルダ内の Excel ブックまたは Excel ブック内のテーブルをループ処理する方法について説明します。

Foreach File 列挙子を使用して Excel ファイルをループ処理するには

  1. ループの反復ごとに現在の Excel のパスとファイル名を受け取る文字列変数を作成します (この手順の後半で示すサンプル式では、ExcelFile という変数名を使用します)。

    ms345182.note(ja-jp,SQL.90).gifメモ :
    検証で問題が発生しないようにするには、変数の初期値として Excel の有効なパスとファイル名を割り当てます
  2. Excel 接続文字列の Extended Properties 引数の値を保持する別の文字列変数を作成します。この引数には、Excel のバージョンを指定したり、最初の行に列名が含まれているかどうか、およびインポート モードが使用されるかどうかを判断する一連の値が格納されます (この手順の後半で示すサンプル式では、初期値が "Excel 8.0;HDR=Yes``" である ExtProperties という名前の変数を使用しています)。

  3. Foreach ループ コンテナを [制御フロー] タブに追加します。Foreach ループ コンテナの構成方法の詳細については、「Foreach ループ コンテナの構成方法」を参照してください。

  4. [Foreach ループ エディタ][コレクション] ページで [Foreach File 列挙子] を選択し、Excel ブックが存在するフォルダを指定して、ファイル フィルタ (通常は *.xls) を指定します。

  5. [変数のマッピング] ページで、ループの反復ごとに現在の Excel のパスとファイル名を受け取るユーザー定義文字列変数に、インデックス 0 をマップします (この手順の後半で示すサンプル式では、ExcelFile という変数名を使用します)。

  6. [Foreach ループ エディタ] を閉じます。

  7. パッケージに接続マネージャを追加する方法」の説明に従って、Excel 接続マネージャをパッケージに追加します。接続時に検証エラーが発生しないように、既存の Excel ブック ファイルを選択してください。

    ms345182.note(ja-jp,SQL.90).gif重要 :
    この Excel 接続マネージャを使用するデータ フロー コンポーネントとタスクを構成する際、検証エラーが発生しないようにするには、[Excel 接続マネージャ] で既存の Excel ブックを選択します。以下の手順に従って ConnectionString プロパティ用の式を構成した後は、接続マネージャは実行時にこのブックを使用しなくなります。パッケージを作成して構成したら、[プロパティ] ウィンドウで ConnectionString プロパティの値を削除することができます。ただし、この値を削除した後、Excel 接続マネージャの接続文字列プロパティは Foreach ループが実行されるまで無効になります。したがって、接続マネージャを使用するタスクまたはパッケージでは、検証エラーが発生しないように、DelayValidation プロパティを True に設定してください。
  8. 新しい Excel 接続マネージャを選択し、[プロパティ] ウィンドウで [Expressions] プロパティをクリックして、参照ボタンをクリックします。

  9. [プロパティ式エディタ] で、[ConnectionString] プロパティを選択し、参照ボタンをクリックします。

  10. 式ビルダで、次の式を入力します。

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  @[User::ExcelFile] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""
    

    Extended Properties 引数の値の前後に必要な内側の引用符をエスケープするために、エスケープ文字 "\" を使用していることに注意してください。

  11. Foreach ループ コンテナ内で、Excel 接続マネージャを使用して、指定したファイルの場所とパターンに一致した各 Excel ブックに対して同じ操作を実行するタスクを作成します。

Foreach ADO.NET Schema Rowset 列挙子を使用して Excel テーブルをループ処理するには

  1. Microsoft Jet OLE DB Provider を使用して Excel ブックに接続する ADO.NET 接続マネージャを作成します。[接続マネージャ] ダイアログ ボックスの [すべて] ページで、Extended Properties プロパティの値として「Excel 8.0」と入力します。詳細については、「パッケージに接続マネージャを追加する方法」を参照してください。

  2. ループの反復ごとに現在のテーブルの名前を受け取る文字列変数を作成します。

  3. Foreach ループ コンテナを [制御フロー] タブに追加します。Foreach ループ コンテナの構成方法については、「Foreach ループ コンテナの構成方法」を参照してください。

  4. [Foreach ループ エディタ][コレクション] ページで、Foreach ADO.NET Schema Rowset 列挙子を選択します。

  5. [コレクション] の値として、以前に作成した ADO.NET 接続マネージャを選択します。

  6. [スキーマ] の値として、[テーブル] を選択します。

    ms345182.note(ja-jp,SQL.90).gifメモ :
    Excel ブック内のテーブルの一覧には、ワークシート ($ サフィックスが付きます) と名前付き範囲が含まれます。ワークシートのみ、または名前付き範囲のみを一覧からフィルタ選択する場合は、そのためのカスタム コードをスクリプト タスクで記述する必要があります。詳細については、「スクリプト タスクを使用した Excel ファイルの操作」を参照してください。
  7. [変数のマッピング] ページで、以前に作成した文字列変数にインデックス 2 をマップし、現在のテーブルの名前を保持します。

  8. [Foreach ループ エディタ] を閉じます。

  9. Foreach ループ コンテナ内で、Excel 接続マネージャを使用して、指定したブック内の各 Excel テーブルに対して同じ操作を実行するタスクを作成します。スクリプト タスクを使用して、列挙されるテーブル名を調べたり各テーブルを操作したりする場合、スクリプト タスクの ReadOnlyVariables プロパティに文字列変数を追加することを忘れないでください。

参照

処理手順

Foreach ループ コンテナの構成方法
プロパティ式を作成する方法

概念

Excel 接続マネージャ
Excel ソース
Excel 変換先

その他の技術情報

スクリプト タスクを使用した Excel ファイルの操作

ヘルプおよび情報

SQL Server 2005 の参考資料の入手