這裏是這樣做基於這樣的假設不會有在Excel中的任何空白紙張的一種可能的方式文件以及所有表單都遵循完全相同的結構。此外,該文件的擴展名是唯一.xlsx
下面的例子是使用SSIS 2008 R2和Excel 2007中創建的假設下。此示例的工作文件夾爲F:\Temp\
在文件夾路徑F:\Temp\
中,使用兩個工作表創建名爲States_1.xlsx
的Excel 2007電子表格文件。
的Sheet 1
States_1.xlsx含有以下數據
![States_1_Sheet_1](https://i.stack.imgur.com/d89uN.png)
的Sheet 2
States_1.xlsx含有以下數據
![States_1_Sheet_2](https://i.stack.imgur.com/iFSHO.png)
在文件夾路徑F:\Temp\
,創建 另一個名爲States_2.xlsx
的Excel 2007電子表格文件包含兩個工作表。
States_2.xlsx的Sheet 1
含有以下數據
![States_2_Sheet_1](https://i.stack.imgur.com/MohQS.png)
Sheet 2
的States_2。XLSX包含以下數據
![States_2_Sheet_2](https://i.stack.imgur.com/cdrZe.png)
創建SQL Server中的表,可以使用下面的腳本創建名爲dbo.Destination。 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$
以避免設計時間錯誤。
在包的連接管理器,創建具有以下配置,並將其命名爲ExcelSchema ADO.NET連接。
在.Net Providers for OleDb下選擇供應商Microsoft Office 12.0 Access Database Engine OLE DB Provider
。提供文件路徑F:\Temp\States_1.xlsx
![ExcelSchema 1](https://i.stack.imgur.com/01JCj.png)
點擊左側的All
部分,將屬性擴展屬性來Excel 12.0
表示的Excel版本。在這種情況下,12.0表示Excel 2007
。點擊測試連接以確保連接成功。
![ExcelSchema 2](https://i.stack.imgur.com/q69xl.png)
創建如下名爲Excel中的Excel連接管理器。
![Excel](https://i.stack.imgur.com/euPvq.png)
創建一個名爲SQLServer
OLE DB連接的SQL Server。所以,我們應該在包裝上有三個連接,如下所示。
![Connections](https://i.stack.imgur.com/Y9im1.png)
我們需要這樣,當文件通過環Excel文件是動態變化做下面的連接字符串的變化。
在連接ExcelSchema上,將表達式ServerName
配置爲使用變量FilePath
。點擊省略號按鈕來配置表達式。
![ExcelSchema ServerName](https://i.stack.imgur.com/mk6Va.png)
類似地連接的Excel上,配置表達式ServerName
使用變量FilePath
。點擊省略號按鈕來配置表達式。
![Excel ServerName](https://i.stack.imgur.com/fomEp.png)
在控制流,將兩個Foreach循環容器一個在另一個內。名爲Loop文件的第一個Foreach Loop container
將循環遍歷文件。第二個Foreach Loop container
將通過容器內的牀單。內的內對於每個循環容器,放置一個數據流任務,將讀出的Excel文件和數據裝載到SQL
![Control Flow](https://i.stack.imgur.com/B0kMO.png)
配置命名爲第一Foreach循環容器環路文件,如下所示:
![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)
數據流任務的內部,放置一個Excel源,派生列和OLE DB目標,如下所示:
![Data Flow Task](https://i.stack.imgur.com/6FOcW.png)
配置Excel Source以讀取相應的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)
配置OLE DB目標將數據插入到SQL表。
![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)
下面的截圖顯示,從4個工作簿中2個的Excel電子表格中創造了這個答案的開頭數據被正確地加載到SQL表dbo.Destination。
![SQL table](https://i.stack.imgur.com/573YM.png)
希望有所幫助。
文件名以「.xslx」結尾。 文件枚舉器搜索這些文件:「[通配符] .xls [通配符]」。 Excel連接管理器自動檢測格式爲「Microsoft Excel 2007」。 – Xariex
[鏈接](https://stackoverflow.com/documentation/ssis/9838/load-multiple-csv-files-of-same-format-from-a-folder#t=201705040855490267183)鏈路是用於裝載多個CSV從文件夾到數據庫的格式相同。 – observer