Aquí es una forma posible de hacer esto en base a la suposición de que no habrá ninguna hoja en blanco en el Excel archivos y también todas las hojas siguen la misma estructura exacta. Además, bajo el supuesto de que la extensión del archivo es solamente .xlsx
Siguiendo el ejemplo se ha creado usando SSIS 2008 R2 y Excel 2007. La carpeta de trabajo para este ejemplo es F:\Temp\
En la ruta de la carpeta F:\Temp\
, cree un archivo de hoja de cálculo de Excel 2007 llamado States_1.xlsx
con dos hojas de cálculo.
Sheet 1
de States_1.xlsx contenían los siguientes datos

Sheet 2
de States_1.xlsx contenía los siguientes datos

En la ruta de la carpeta F:\Temp\
, crear otro archivo de hoja de cálculo Excel 2007 nombrado States_2.xlsx
con dos hojas de trabajo.
Sheet 1
de States_2.xlsx contenían los siguientes datos

Sheet 2
de States_2.xlsx contenía los siguientes datos

Crear una tabla en SQL Server denominado dbo.Destination mediante el siguiente script de creación. Los datos de la hoja de Excel se insertarán en esta tabla.
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
La tabla está actualmente vacía.

Cree un nuevo paquete de SSIS y en el paquete, cree los siguientes 4 variables. FolderPath contendrá la carpeta donde se almacenan los archivos de Excel. FilePattern contendrá la extensión de los archivos que se enlazarán y este ejemplo solo funciona para .xlsx
. Se asignará a FilePath un valor en el contenedor Foreach Loop, pero necesitamos una ruta válida para comenzar con el tiempo de diseño y actualmente se rellena con la ruta F:\Temp\States_1.xlsx
del primer archivo de Excel. El Nombre de la hoja contendrá el nombre de la hoja real, pero necesitamos rellenarlo con el valor inicial Sheet1$
para evitar el error de tiempo de diseño.

En administrador de conexión del paquete, cree una conexión ADO.NET con la siguiente configuración y el nombre como ExcelSchema.
Seleccione el proveedor Microsoft Office 12.0 Access Database Engine OLE DB Provider
en .Net Proveedores para OleDb. Proporcionar la ruta del archivo F:\Temp\States_1.xlsx

Haga clic en la sección All
en el lado izquierdo y establecer las propiedades de propiedad extendido a Excel 12.0
para denotar la versión de Excel. Aquí en este caso 12.0 denota Excel 2007
. Haga clic en Probar conexión para asegurarse de que la conexión tenga éxito.

Crear un administrador de conexión de Excel denominado Excel como se muestra a continuación.

Crear una conexión OLE DB de SQL Server denominado SQLServer
. Entonces, deberíamos tener tres conexiones en el paquete como se muestra a continuación.

que tenemos que hacer los siguientes cambios de cadena de conexión para que el archivo de Excel se cambia dinámicamente a medida que los archivos se enlazan a través.
En la conexión ExcelSchema, configure la expresión ServerName
utilizar la variable FilePath
. Haga clic en el botón de puntos suspensivos para configurar la expresión.

Del mismo modo en la conexión Excel, configurar la expresión ServerName
utilizar la variable FilePath
. Haga clic en el botón de puntos suspensivos para configurar la expresión.

En el flujo de control, coloque dos contenedores de bucles Foreach uno dentro del otro. Los primeros Foreach Loop container
archivos Loop con nombre recorrerán los archivos. El segundo Foreach Loop container
pasará por las hojas dentro del contenedor. En el interior Para cada contenedor de bucle, colocar una tarea Flujo de datos que se va a leer los archivos de Excel y cargar datos en SQL

Configurar el primer contenedor de bucle Foreach llamado ficheros de bucle como se muestra a continuación:


Configurar el primer contenedor de bucle Foreach llamado hojas Loop como se muestra a continuación:


Dentro de la tarea de flujo de datos, coloque una columna de Excel Fuente, derivados y de Destino de OLE DB como se muestra a continuación:

Configure el origen de Excel para leer el archivo de Excel apropiado y la hoja que se está bucleando actualmente .


Configurar la columna derivada para crear nuevas columnas de nombre de archivo y nombre de la hoja. Esto es solo para demostrar este ejemplo, pero no tiene importancia.

Configurar el destino de OLE DB para insertar los datos en la tabla de SQL.


A continuación pantalla muestra una ejecución exitosa del paquete.

A continuación pantalla muestra que los datos de los 4 libros de trabajo en 2 hojas de cálculo de Excel que estaban creando en el comienzo de esta respuesta se ha cargado correctamente en la tabla de SQL dbo.Destination.

Espero que ayude.
Los nombres de archivo terminan en ".xslx". File Enumerator busca estos archivos: "[comodín] .xls [comodín]". Excel Connection Manager detectó automáticamente el formato como "Microsoft Excel 2007". – Xariex
[link] (https://stackoverflow.com/documentation/ssis/9838/load-multiple-csv-files-of-same-format-from-a-folder#t=201705040855490267183) el enlace es para cargar varios archivos CSV del mismo formato de una carpeta a la base de datos. – observer