Este Post es por una consulta, sobre este tema. Una
posible forma de hacerlo se basa en la suposición de que no habrá ninguna hoja
en blanco en los archivos de Excel y también todas las hojas tienen la misma
estructura exacta. Además, bajo el supuesto de que la extensión del archivo es
sólo .xlsx.
El
ejemplo se ha creado usando SSIS 2014 y Excel 2010. La carpeta de trabajo para
este ejemplo es C:\SSIS\Data Flow\Archivos\.
En la
ruta de la carpeta C:\SSIS\Data Flow\Archivos\, crear dos archivos Excel 2010 llamados Ubigeo01.xlsx con dos hojas y Ubigeo02.xlsx con dos hojas.
La Hoja1 de Ubigeo01.xlsx contiene los siguientes datos:
La Hoja2 de Ubigeo01.xlsx contiene los siguientes datos:
Creamos
en SSMS una base de datos o usamos alguna BD disponible. Luego creamos una
tabla llamada Destination.
CREATE TABLE Destination
(
Departamento nvarchar(255) NULL,
Provincia nvarchar(255) NULL,
Distrito nvarchar(255) NULL,
RutaArchivo nvarchar(255) NULL,
NombreHoja nvarchar(255) NULL
);
GO
Esta
tabla está actualmente vacía.
Creamos
un nuevo proyecto SSIS, renombramos el paquete SSIS y en el paquete, creamos las
siguientes 4 variables. RutaCarpeta contendrá
la carpeta donde se almacenan los archivos de Excel. PatronArchivo contendrá la extensión de los archivos que se enlazan
desde ahí y este ejemplo sólo funciona para .xlsx. RutaArchivo
asignará un valor para el contenedor Foreach Loop, pero necesitamos una ruta
válida para empezar en tiempo de diseño y actualmente rellenado con la ruta C:\SSIS\Data
Flow\Archivos\Ubigeo01.xlsx del
primer archivo de Excel. NombreHoja
contendrá el nombre real de la hoja, pero tenemos que llenar con el valor
inicial Hoja1$ para evitar errores de tiempo de diseño.
Seleccionar el proveedor Microsoft Office 12.0 Access
Database Engine OLE DB Provider bajo .Net Providers for OleDb. Proporcionar
la ruta del archivo C:\SSIS\Data Flow\Archivos\Ubigeo01.xlsx.
Creamos
un administrador de conexión de Excel y lo llamamos Excel como se muestra a
continuación.
Crear
una conexión OLE DB de SQL Server denominada SQLServer. Por lo tanto, debemos tener tres conexiones
en el paquete como se muestra a continuación.
Necesitamos
hacer los siguientes cambios en la cadena de conexión para que el archivo de
Excel sea cambiado dinámicamente a medida que los archivos sean enlazados.
Sobre
la conexión EsquemaExcel, configure la
expresión ServerName para utilizar la
variable RutaArchivo. Haga clic en el botón de puntos suspensivos para
configurar la expresión.
Del
mismo modo en la conexión Excel,
configure la expresión ServerName
para utilizar la variable RutaArchivo. Haga clic en el botón de puntos suspensivos para configurar la
expresión.
En el
Control Flow, coloque dos contenedores Foreach Loop uno dentro del otro. El
primer contenedor Foreach Loop llamado
Bucle Archivos hará un bucle a
través de los archivos. El segundo contenedor Foreach Loop, llamado Bucle
Hojas, hará un bucle a través de las hojas dentro del contenedor. En el
interior del contenedor Foreach Loop, coloque una tarea Data Flow que leerá los
archivos de Excel y cargará los datos en SQL.
Configure
el segundo contenedor Foreach Loop llamado Bucle
Hojas como se muestra abajo:
En la
ficha Variable Mappings.
Configure
el Origen de Excel para leer el
archivo de Excel apropiado y la hoja que actualmente está siendo enlazada.
En la
ficha Mappings.
Se ejecuta el paquete. Debajo
de la captura de pantalla se muestra la ejecución exitosa del paquete, en SSMS.
7 comentarios:
Este Post es una consulta que me hicieron. Espero les sirva.
profesor para versiones de sql server 2008 r2 como se puede hacer
En el administrador de conexión del paquete, creamos una conexión ADO.NET con la siguiente configuración y la nombramos como EsquemaExcel.
A DONDE SE HACE ESO??? Y LO QUE SIGUE???
FLACO EXPLICAS COMO EL ORTO!!!
Buenas tardes profesor,
He implementado esta solución para varios archivos excel y ha funcionado muy bien, excepto por uno, el cual en una casilla contiene mas de 1000 caracteres, correspondiendo a una descripcion de diversos productos. Al hacerlo dinamicamente con SSIS y EXCEL, me esta arrojando el siguiente error, he buscado en internet pero no encuentro solucion.
Estoy leyendo la columna con formato NTEXT y mediante ETL cargandola a una tabla en SQLServer.
Los archivos excel son 97-2003.
-[Origen de Excel [60]] Error: Código de error SSIS DTS_E_OLEDBERROR. Error de OLE DB. Código de error: 0x80040E21.
Hay un registro OLE DB disponible. Origen: 'Microsoft JET Database Engine' Resultado: 0x80040E21
Descripción: 'La operación de múltiples pasos de OLE DB generó errores.
Compruebe los valores de estado de OLE DB si es posible. No se realizó ningún trabajo.'.
-[Origen de Excel [60]] Error: Error al recuperar datos long para la columna 'D_MARK'.
-[Origen de Excel [60]] Error: Error con Origen de Excel.Salidas[Salida de origen de Excel] en Origen de Excel.
Se devolvió el estado de columna: 'DBSTATUS_UNAVAILABLE'.
-[Origen de Excel [60]] Error: Código de error SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR.
Error de 'Origen de Excel.Salidas[Salida de origen de Excel]' a causa de un error con el código 0xC0209071 y a
la especificación de un error en la disposición de filas de error en 'Origen de Excel'.
Me podrias ayudar guiandome que tengo que hacer
me sale este error y segui tu manual paso a paso
Error: El proveedor 'Microsoft.ACE.OLEDB.12.0' no admite el esquema OleDbSchemaGuid Assertions.
cuando se ejecuta el Bucle de Hojas el Bucle de archivo funciona y el task tambien falla al ejecutar el Bucle de hojas.
Me podrias ayudar guiandome que tengo que hacer
Me sale este error y seguí tu manual paso a paso
Error: El proveedor 'Microsoft.ACE.OLEDB.12.0' no admite el esquema OleDbSchemaGuid Assertions.
Cuando se ejecuta el Bucle de Hojas el Bucle de archivo funciona perfectamente y el task también funciona perfectamente, el que falla al ser ejecutado es el Bucle de hojas.
O si si hay otra forma para cargar en una tabla todas las hojas de un excel que tienen el mismo formato, mi excel de carga tiene 36 hojas que son el mismo formato de diferentes clientes y con la misma estructura, esta solución me parece perfecta para lo que necesito pero me falla precisamente en el paso del Bucle de hojas.
Te agradezco cualquier ayuda al respecto
Yimmi Moreno
COLOMBIA
q812h7bvlzd241 realistic dildo,cheap sex toys,horse dildo,wholesale sex toys,realistic vibrators,dildos,Rabbit Vibrators,dog dildo,vibrators j917x1vlkyx433
Publicar un comentario