Excelで空白のシートがないことを前提にしてこれを行うの1つの可能な方法でいただければ幸いです
ファイルとすべてのシートはまったく同じ構造に従います。また、ファイルの拡張子のみ.xlsx
次の例は、SSIS 2008 R2とExcel 2007のを使用して作成されたある仮定の下で。この例の作業フォルダはF:\Temp\
です。フォルダパスF:\Temp\
には、2つのワークシートを持つExcel 2007スプレッドシートファイルStates_1.xlsx
を作成します。 の
Sheet 1
はStates_1.xlsxは、States_1.xlsx次のデータ
フォルダパスF:\Temp\
で
を含有し、以下のデータ
の
Sheet 2
を含有しました作成する別のExcel 2007スプレッドシートファイルStates_2.xlsx
と2つのワークシートがあります。 States_2.xlsxの
Sheet 1
次のデータをStates_2の
![States_2_Sheet_1](https://i.stack.imgur.com/MohQS.png)
Sheet 2
を含有していました。xlsxは、次のデータ
![States_2_Sheet_2](https://i.stack.imgur.com/cdrZe.png)
以下のスクリプトを作成して使用してdbo.Destinationという名前のSQL Serverのテーブルを作成します
を含んでいました。 Excelシートデータがこのテーブルに挿入されます。
CREATE TABLE [dbo].[Destination](
[Id] [int] IDENTITY(1,1) NOT NULL,
[State] [nvarchar](255) NULL,
[Country] [nvarchar](255) NULL,
[FilePath] [nvarchar](255) NULL,
[SheetName] [nvarchar](255) NULL,
CONSTRAINT [PK_Destination] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
テーブルは現在空です。
![Empty table](https://i.stack.imgur.com/aXu6B.png)
新しいSSISパッケージを作成し、パッケージには、以下の4つの変数を作成します。 FolderPathには、Excelファイルが保存されているフォルダが含まれます。 FilePatternには、ループされるファイルの拡張子が含まれています。この例は、.xlsx
でのみ動作します。 FilePathにはForeachループコンテナの値が割り当てられますが、設計時に有効なパスが必要で、最初に最初のExcelファイルのパスF:\Temp\States_1.xlsx
が設定されています。 シート名には実際のシート名が含まれますが、設計時間の誤差を避けるために初期値Sheet1$
を入力する必要があります。パッケージの接続マネージャで
、次のように構成されたADO.NET接続を作成し、ExcelSchemaとして名前を付けます。
OleDbのプロバイダプロバイダMicrosoft Office 12.0 Access Database Engine OLE DB Provider
を選択します。左側All
セクションにファイルパスにF:\Temp\States_1.xlsx
![ExcelSchema 1](https://i.stack.imgur.com/01JCj.png)
クリックを提供し、Excelのバージョンを示すためにExcel 12.0
にプロパティ拡張プロパティを設定します。ここでは、12.0はExcel 2007
を示しています。 [接続のテスト]をクリックして、接続が成功したことを確認します。
![ExcelSchema 2](https://i.stack.imgur.com/q69xl.png)
以下に示すようにエクセルという名前のExcel接続マネージャを作成します。
![Excel](https://i.stack.imgur.com/euPvq.png)
SQLServer
という名前のOLE DB接続SQL Serverを作成します。したがって、以下に示すように、パッケージに3つの接続が必要です。
![Connections](https://i.stack.imgur.com/Y9im1.png)
私たちは、ファイルがループスルーされるExcelファイルを動的に変更されるように、次の接続文字列の変更を行う必要があります。
接続の場合ExcelSchemaの場合、式ServerName
に変数FilePath
を使用するように構成します。式を構成するには、省略記号ボタンをクリックします。
![ExcelSchema ServerName](https://i.stack.imgur.com/mk6Va.png)
同様接続エクセルに、変数FilePath
を使用する発現ServerName
を構成します。式を構成するには、省略記号ボタンをクリックします。制御フローで
![Excel ServerName](https://i.stack.imgur.com/fomEp.png)
、2つのForeachループコンテナ他の内の一つを置きます。最初のForeach Loop container
という名前のループファイルはファイルをループします。第2のForeach Loop container
は、容器内のシートを通過する。各ループコンテナの内側の内では、以下に示すようにSQL
![Control Flow](https://i.stack.imgur.com/B0kMO.png)
設定という名前の最初のforeachループコンテナループをファイルにExcelファイルとロードデータを読み取ることをデータフロータスクを置く:
を
![Foreach Loop 1 Collection](https://i.stack.imgur.com/cW7F7.png)
![Foreach Loop 1 Variable Mappings](https://i.stack.imgur.com/rlyUE.png)
という名前の最初のforeachループコンテナを構成します以下に示すようにループシート:以下に示すように
![Foreach Loop 2 Collection](https://i.stack.imgur.com/bVnbR.png)
データフロータスク内![Foreach Loop 2 Variable Mappings](https://i.stack.imgur.com/RZDbK.png)
、エクセルソース、派生列とOLE DB先を置く:
![Data Flow Task](https://i.stack.imgur.com/6FOcW.png)
Excelソースを設定して、適切なExcelファイルと現在ループしているシートを読み取ります。
![Excel Source Connection Manager](https://i.stack.imgur.com/Q1Ona.png)
![Excel Source Columns](https://i.stack.imgur.com/3SEHc.png)
ファイル名とシート名に新しい列を作成するために、派生列を設定します。これは、この例を示すためのものですが、意味がありません。
![Derived column](https://i.stack.imgur.com/OUTHk.png)
SQLテーブルにデータを挿入するために、OLE DB先を設定します。スクリーンショット以下
![OLE DB Destination Connection Manager](https://i.stack.imgur.com/ZUo6x.png)
![OLE DB Destination Columns](https://i.stack.imgur.com/NprFQ.png)
パッケージの実行が成功を示しています。スクリーンショット以下
![Execution successful](https://i.stack.imgur.com/Xzaxz.png)
この回答の初めに作成された2枚のExcelスプレッドシートで4つのワークブックからのデータが正しくSQLテーブルdbo.Destinationにロードされていることを示しています。
![SQL table](https://i.stack.imgur.com/573YM.png)
お役に立てば幸いです。
ファイル名の最後は ".xslx"です。 File Enumeratorは、これらのファイル "[wildcard] .xls [wildcard]"を検索します。 Excel接続マネージャは、「Microsoft Excel 2007」としてフォーマットを自動検出しました。 – Xariex
[link](https://stackoverflow.com/documentation/ssis/9838/load-multiple-csv-files-of-same-format-from-a-folder#t=201705040855490267183)リンクは複数のCSVを読み込むためのものです同じフォーマットのフォルダからデータベースへ – observer