Dưới đây là một cách tốt để làm điều này dựa trên giả định rằng sẽ không có bất kỳ tấm trống trong Excel các tệp và tất cả các trang tính đều theo cùng cấu trúc chính xác. Ngoài ra, theo giả định rằng phần mở rộng tập tin là chỉ .xlsx
Tiếp theo ví dụ được tạo bằng SSIS 2008 R2 và Excel 2007. Thư mục làm việc cho ví dụ này là F:\Temp\
Trong đường dẫn thư mục F:\Temp\
, tạo tệp bảng tính Excel 2007 có tên States_1.xlsx
với hai trang tính.
Sheet 1
của States_1.xlsx chứa các dữ liệu sau
Sheet 2
của States_1.xlsx chứa các dữ liệu sau
Trong đường dẫn thư mục F:\Temp\
, tạo nên một tệp bảng tính Excel 2007 khác có tên là States_2.xlsx
với hai trang tính.
Sheet 1
của States_2.xlsx chứa các dữ liệu sau
Sheet 2
của States_2.xlsx chứa các dữ liệu sau
Tạo một bảng trong SQL Server tên dbo.Destination sử dụng dưới đây tạo ra kịch bản. Dữ liệu trang tính Excel sẽ được chèn vào bảng này.
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
Bảng hiện đang trống.
Tạo một gói SSIS mới và trên bao bì, tạo ra 4 biến sau. FolderPath sẽ chứa thư mục chứa các tệp Excel. FilePattern sẽ chứa phần mở rộng của các tệp sẽ được lặp qua và ví dụ này chỉ hoạt động cho .xlsx
. FilePath sẽ được gán với giá trị bởi vùng chứa Foreach Loop nhưng chúng ta cần một đường dẫn hợp lệ để bắt đầu với thời gian thiết kế và nó hiện được điền bằng đường dẫn F:\Temp\States_1.xlsx
của tệp Excel đầu tiên. SheetName sẽ chứa tên trang tính thực tế nhưng chúng tôi cần điền giá trị ban đầu Sheet1$
để tránh lỗi thời gian thiết kế.
Trong quản lý kết nối của gói, tạo ra một kết nối ADO.NET với cấu hình sau đây và đặt tên là ExcelSchema.
Chọn nhà cung cấp Microsoft Office 12.0 Access Database Engine OLE DB Provider
trong .Net Nhà cung cấp cho OleDb. Cung cấp các đường dẫn tập tin F:\Temp\States_1.xlsx
Bấm vào All
phần ở phía bên trái và thiết lập thuộc tính mở rộng Properties để Excel 12.0
để biểu thị phiên bản của Excel. Trong trường hợp này, 12.0 biểu thị Excel 2007
. Nhấn vào Test Connection để đảm bảo kết nối thành công.
Tạo một trình quản lý kết nối Excel tên Excel như hình dưới đây.
Tạo một OLE DB kết nối SQL Server tên SQLServer
. Vì vậy, chúng ta nên có ba kết nối trên bao bì như hình dưới đây.
Chúng ta cần phải làm những thay đổi chuỗi kết nối sau đây để các tập tin Excel bị thay đổi năng động như các tập tin được looped qua.
Trên kết nối ExcelSchema, định cấu hình biểu thức ServerName
để sử dụng biến FilePath
. Nhấp vào nút dấu ba chấm để định cấu hình biểu thức.
Tương tự như vậy vào kết nối Excel, cấu hình các biểu ServerName
sử dụng biến FilePath
. Nhấp vào nút dấu ba chấm để định cấu hình biểu thức.
Trên Flow Control, đặt hai container Foreach Vòng một trong khác. Các tệp vòng lặp có tên Foreach Loop container
đầu tiên sẽ lặp qua các tệp. Thứ hai Foreach Loop container
sẽ thông qua các trang tính trong vùng chứa. Trong khu vực nội Đối với mỗi thùng chứa vòng lặp, đặt một Data Flow nhiệm vụ mà sẽ đọc các tập tin Excel và tải dữ liệu vào SQL
Cấu hình đầu tiên chứa vòng lặp foreach tên Vòng file như hình dưới đây:
Cấu hình đầu tiên chứa vòng lặp foreach tên tờ Vòng như hình dưới đây:
Bên trong nhiệm vụ luồng dữ liệu, đặt một cột Excel Nguồn, nguồn gốc và OLE DB Destination như hình dưới đây:
Định cấu hình Nguồn Excel để đọc tệp Excel thích hợp và trang tính hiện đang được lặp qua .
Configure cột xuất phát để tạo ra các cột mới cho tên tập tin và tên sheet. Đây chỉ là để chứng minh ví dụ này nhưng không có ý nghĩa.
Định cấu hình đích OLE DB để chèn dữ liệu vào bảng SQL.
Dưới ảnh chụp màn hình cho thấy thực hiện thành công của gói.
Dưới ảnh chụp màn hình cho thấy dữ liệu từ 4 workbook trong 2 bảng tính Excel được tạo ra trong phần đầu của câu trả lời này được nạp một cách chính xác vào dbo.Destination bảng SQL.
Hy vọng điều đó sẽ hữu ích.
Tên tệp kết thúc bằng ".xslx". File Enumerator tìm kiếm các tệp này: "[wildcard] .xls [wildcard]". Trình quản lý kết nối Excel tự động định dạng là "Microsoft Excel 2007". – Xariex
[link] (https://stackoverflow.com/documentation/ssis/9838/load-multiple-csv-files-of-same-format-from-a-folder#t=201705040855490267183) liên kết để tải nhiều CSV có cùng định dạng từ thư mục đến cơ sở dữ liệu. – observer