Excel ソースは、 Microsoft Excel ブック内のワークシートまたは範囲からデータを抽出します。
Excel ソースでは、データを抽出するために、次の 4 つの異なるデータ アクセス モードが用意されています。
テーブルまたはビュー。
変数で指定されたテーブルまたはビュー。
SQL ステートメントの結果。 クエリにはパラメーター化クエリを使用できます。
変数に格納されている SQL ステートメントの結果。
重要
Excel では、ワークシートまたは範囲はテーブルまたはビューに相当します。 Excel の変換元エディターと変換先エディターで使用可能なテーブルの一覧には、既存のワークシート (シート 1$ などのワークシート名に追加された $ 記号で識別されます) と名前付き範囲 (MyRange などの $ 記号が存在しないことで識別されます) が表示されます。 詳細については、「使用に関する考慮事項」セクションを参照してください。
Excel ソースは、Excel 接続マネージャーを使用してデータ ソースに接続します。Excel 接続マネージャーでは、使用する Excel ブック ファイルを指定します。 詳しくは、「 Excel Connection Manager」をご覧ください。
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 の Excel データで ADO を使用する」を参照してください。
Excel ドライバーを使用した Jet プロバイダーの次の動作により、Excel データ ソースからデータを読み取るときに予期しない結果が発生する可能性があります。
データ ソース。 Excel ブック内のデータのソースには、$記号を追加する必要があるワークシート (Sheet1$ など)、または名前付き範囲 (MyRange など) を指定できます。 SQL ステートメントでは、$ 記号による構文エラーを回避するために、ワークシートの名前を区切る必要があります (例: [Sheet1$])。 クエリ ビルダーは、これらの区切り記号を自動的に追加します。 ワークシートまたは範囲を指定すると、ドライバーは、ワークシートまたは範囲の左上隅にある最初の空でないセルから始まる連続したセル ブロックを読み取ります。 そのため、ソース データに空の行を含めたり、タイトル行またはヘッダー行とデータ行の間に空の行を含めることはできません。
不足している値。 Excel ドライバーは、指定したソース内の特定の数の行 (既定では 8 行) を読み取り、各列のデータ型を推測します。 1 つの列に複数のデータ型が混在している可能性がある場合、特に数値データとテキスト データが混合している場合に、Excel ドライバーは数が多い方のデータ型を優先して判定し、それ以外のデータ型のデータが含まれるセルについては NULL 値を返します (同数の場合は、数値型が優先されます)。Excel ワークシートでのセル書式のほとんどのオプションは、このデータ型の判定に影響しません。 インポート モードを指定することで、Excel ドライバーのこの動作を変更できます。 インポート モードを指定するには、[プロパティ] ウィンドウの Excel 接続マネージャーの接続文字列の拡張プロパティの値に
IMEX=1
を追加します。 詳細については、「 PRB: DAO OpenRecordset を使用して NULL として返される Excel 値」を参照してください。テキストの切り捨て。 Excel の列にテキスト データが含まているとドライバーが判定した場合、ドライバーはサンプリングした最も長い値に基づいて、データ型 (文字列またはメモ) を選択します。 ドライバーがサンプリングした行で 255 文字より長い値が検出されなかった場合、その列はメモ列ではなく、255 文字の文字列の列として扱われます。 このため、255 文字より長い値があると、切り捨てられる場合があります。 切り捨てなしでメモ列からデータをインポートするには、サンプリングされた行の少なくとも 1 つのメモ列に 255 文字を超える値が含まれていることを確認する必要があります。または、このような行を含めるには、ドライバーによってサンプリングされた行の数を増やす必要があります。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel レジストリ キーの TypeGuessRows の値を大きくすることで、サンプリングされる行の数を増やすことができます。 詳細については、「 PRB: Jet 4.0 OLEDB ソースからのデータ転送がエラーで失敗する」を参照してください。
データ型。 Excel ドライバーでは、データ型の限定されたセットのみを認識します。 たとえば、すべての数値列は倍精度浮動小数点型 (DT_R8) として解釈され、すべての文字列の列 (メモ列以外) は 255 文字の Unicode 文字列 (DT_WSTR) として解釈されます。 Integration Services は、Excel のデータ型を次のようにマップします。
Numeric - 倍精度浮動小数点数 (DT_R8)
Currency - 通貨 (DT_CY)
Boolean - ブール (DT_BOOL)
日付/時刻 -
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 のファイルおよびテーブルをループ処理する」をご覧ください。
関連タスク
関連コンテンツ
SSIS での 64 ビット Excel からのデータのインポートに関するブログ エントリ(hrvoje.piasevoli.com)
SSIS での Excel (XLSX) への接続に関するブログ エントリ。