Excel ソース

Excel ソースは、Microsoft Excel ブック内のワークシートまたは範囲からデータを抽出します。

Excel ソースでは、データを抽出するために、次の 4 つの異なるデータ アクセス モードが用意されています。

  • テーブルまたはビュー。

  • 変数で指定されたテーブルまたはビュー。

  • SQL ステートメントの結果。クエリにはパラメータ化クエリを使用できます。

  • 変数に格納された SQL ステートメントの結果。

重要な注意事項重要

Excel でのワークシートまたは範囲は、テーブルまたはビューに相当します。Excel ソース エディタと Excel 変換先エディタで使用できるテーブルの一覧では、既存のワークシート (Sheet1$ など、ワークシート名に $ 記号を付加して識別) と名前付き範囲 (MyRange など、$ 記号が付かないことで識別) が表示されます。詳細については、「使用に関する注意点」を参照してください。

Excel ソースは、Excel 接続マネージャを使用してデータ ソースに接続します。Excel 接続マネージャでは、使用する Excel ブック ファイルを指定します。詳細については、「Excel 接続マネージャ」を参照してください。

Excel ソースは、1 つの標準出力と 1 つのエラー出力をとります。

使用に関する注意点

Excel 接続マネージャは、Microsoft OLE DB Provider for Jet 4.0 と、それによってサポートされる Excel ISAM (Indexed Sequential Access Method) ドライバを使用して Excel データ ソースに接続し、データの読み取りおよび書き込みを行います。

Microsoft サポート技術情報に含まれる資料の多くは、このプロバイダおよびドライバの処理に関するドキュメントです。これらの資料は Integration Services または従来のデータ変換サービスに固有のものではありませんが、予期しない結果が発生する可能性のある特定の動作について知っておくことをお勧めします。Excel ドライバの使用および動作に関する一般情報については、「[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する」を参照してください。

Jet プロバイダを Excel ドライバと共に使用した場合、次のような動作が原因で、Excel データ ソースのデータを読み取るときに予期しない結果が発生する場合があります。

  • データ ソース。Excel ブックの変換元データには、ワークシートまたは名前付き範囲 (MyRange など) を使用できます。ワークシート名には $ 記号を付加する必要があります (Sheet1$ など)。SQL ステートメントでは、$ 記号による構文エラーを回避するため、ワークシートの名前を [Sheet1$] などのように区切る必要があります。クエリ ビルダは、これらの区切り記号を自動的に付加します。ワークシートまたは範囲を指定した場合、ドライバは、ワークシートまたは範囲の左上の空でない最初のセルから、連続したセルのブロックを読み取ります。したがって、ソース データには、タイトル行またはヘッダー行とデータ行との間に空の行を入れることはできません。

  • 不足している値。Excel ドライバは、指定した変換元の特定の行数 (既定では 8 行) を読み取り、各列のデータ型を推測します。1 つの列に複数のデータ型が混在している可能性がある場合、特に数値データとテキスト データが混合している場合に、Excel ドライバは数が多い方のデータ型を優先して判定し、それ以外のデータ型のデータが含まれるセルについては NULL 値を返します (同数の場合は、数値型が優先されます)。Excel ワークシートでのセル書式のほとんどのオプションは、このデータ型の判定に影響しません。Excel ドライバのこの動作を変更するには、インポート モードを指定します。インポート モードを指定するには、[プロパティ] ウィンドウで、Excel 接続マネージャの接続文字列内の拡張プロパティの値に IMEX=1 を追加します。詳細については、「[PRB] DAO の OpenRecordset を使用すると Excel の値として NULL が返される」を参照してください。

  • 切り捨てられたテキスト。Excel の列にテキスト データが含まているとドライバが判定した場合、ドライバはサンプリングした最も長い値に基づいて、データ型 (文字列またはメモ) を選択します。ドライバがサンプリングした行で 255 文字より長い値が検出されなかった場合、その列はメモ列ではなく、255 文字の文字列の列として扱われます。このため、255 文字より長い値があると、切り捨てられる場合があります。切り捨てを発生させずにメモ列からデータをインポートするには、サンプリングされた行のうち 1 行以上のメモ列に、255 文字より長い値が含まれている状態にする必要があります。または、そのような行が含まれるように、ドライバがサンプリングする行数を増やす必要があります。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel レジストリ キーの TypeGuessRows の値を増やすことで、サンプリングする行数を増やすことができます。詳細については、「[PRB] DTS: Jet 4.0 OLEDB からの転送がバッファのオーバーフロー エラーで失敗」を参照してください。

  • データ型。Excel ドライバでは、データ型の限定されたセットのみを認識します。たとえば、すべての数値列は倍精度浮動小数点型 (DT_R8) として解釈され、すべての文字列の列 (メモ列以外) は 255 文字の Unicode 文字列 (DT_WSTR) として解釈されます。Integration Services では、Excel データ型を次のようにマップします。

    • Numeric – 倍精度浮動小数 (DT_R8)

    • Currency – 通貨 (DT_CY)

    • Boolean – ブール (DT_BOOL)

    • Date/time – datetime (DT_DATE)

    • String – Unicode 文字列、長さ 255 (DT_WSTR)

    • Memo – Unicode テキスト ストリーム (DT_NTEXT)

  • データ型と長さの変換。Integration Services では、データ型の暗黙な変換が行われません。したがって、派生列変換またはデータ変換の変換を使用して、Excel データを明示的に変換してから Excel 以外の変換先に読み込むか、Excel データを Excel 以外のデータに変換してから Excel 変換先に読み込む必要があります。この場合、初期パッケージを作成する際に、必要な変換を構成できるインポート ウィザードおよびエクスポート ウィザードを使用すると便利な場合があります。必要な変換の例を次に示します。

    • 特定のコードページを使用した Unicode Excel 文字列の列と Unicode 以外の文字列の列間の変換

    • 255 文字の Excel 文字列の列と異なる長さの文字列の列間の変換

    • 倍精度の Excel 数値列と他の型の数値列の列間の変換

Excel ソースの構成

プロパティを設定するには SSIS デザイナから行うか、またはプログラムによって設定します。

[Excel ソース エディタ] ダイアログ ボックスで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。

[詳細エディタ] ダイアログ ボックスには、プログラムによって設定できるすべてのプロパティが反映されます。[詳細エディタ] ダイアログ ボックスまたはプログラムで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。

プロパティの設定方法の詳細については、次のトピックのいずれかを参照してください。

複数の Excel ファイルをループ処理する方法については、「Foreach ループ コンテナを使用して Excel のファイルおよびテーブルをループ処理する方法」を参照してください。

Integration Services のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを購読します。

変更履歴

変更内容

  • Microsoft Office Excel 2007 を使用するデータ ソースでは Excel の以前のバージョンとは異なる接続マネージャが必要となることに関する注意書きを削除しました。接続方法に関する最新情報については、「Excel ブックに接続する方法」を参照してください。