La idea sería cargar un fichero de excel que contiene datos en una
tabla para que se muestren en un DataViewGrid y así poder pasar a una
base de datos SQL.
Para ello vamos a hacer uso de OLE DB,
(Object Linking and Embeding for Data Bases), que no es mas que una
tecnología propia de Microsofot para permitir el acceso a datos. OLE DB
forma parte de la tecnología MDAC (Microsoft Data Access Componentes) de
microsoft, que divide OLE DB en dos componentes principales,
consumidores, y proveedores en referencia a como tratan los datos.
Usaremos así los proveedores OLE DB para acceder a cualquier tipo de
dato, desde una hoja de excell a una base de datos SQL, Oracle, etc…
Para hacer nuestro ejemplo crearemos un simple projecto del tipo WFA
(Windows Form Application), al que añadiremos cuatro componentes:
- Un Data GridView que llamaremos: dGVExcel
- Un Binding Source que llamaremos: dBSource
- Un Text Box que llamaremos: txBxPath, y que en la propiedad Text tendrá el nombre del excell que queremos abrir, incluyendo el path de búsqueda, en mi caso C:\Users\uge\Desktop\excell1.xlsx
- Y un botón, que al hacer click sobre el abrira el excel indicado en el TextBox mostrando los datos en el DataGridView.
Para poder hacer uso de OLE DB tenemos que añadir a los using del fichero:
using System.Data.OleDb;
Una vez hecho esto hacemos doble click sobre el botón para escribir el código correspondiente, que será como sigue:
Primero necesitamos crear un string que contenga la siguiente info:
1- La configuración de nuestro OLE DB Provider.
Existen muchos tipos de proveedores implementados, así que tenemos que
tener claro cual vamos a usar. En nuestro caso es una hoja de excel
creada con office 2010, así que usaremos como provider Microsoft.ACE.OLEDB.12.0;
En esta página http://www.connectionstrings.com/
podéis acceder a información relativa a conexiones, no solo para OLE
DB, sinó también para otras formas de conexion. Para excel podeis
encontrarlas en http://www.connectionstrings.com/excel
2 – El DataSource del que obtendremos los datos, esto es, nuestro fichero de excel, que sacaremos del campo Text del objeto txBxPatx.
3 – Propiedades del fichero a abrir, es decir las Extended properties. en nuestro caso usaremos Excel 12.0 XMml; HDR=YES. Esta última indica por ejemplo que se añada la primera fila con los títulos de las columnas.
Añadimos al código:
string connectionString = @”Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=” + txBxPath.Text + @”;
Extended Properties=”"Excel 12.0 Xml;HDR=YES”"”;
Data Source=” + txBxPath.Text + @”;
Extended Properties=”"Excel 12.0 Xml;HDR=YES”"”;
Lo siguiente será preparar una consulta que extraiga los datos del
provider, la consulta se hace en SQL y el nombre que incluimos será el
de la Hoja dentro del excel de la que sacar los datos, en mi caso es
Hoja1, y se le añadirá $ por detrás:
string query = “SELECT * FROM [Hoja1$]“;
Una vez tenemos el string que configura al provider, y la consulta
que extrae los datos vamos a crear la conexión y extraer los datos hacia
una tabla que también crearemos en el código:
//Creamos el provider
OleDbConnection excelConnection = new OleDbConnection(connectionString);
//Lo abrimos
excelConnection.Open();
//Creamos un Data Adapter que extraiga los datos necesarios(todos) del provider
OleDbDataAdapter data = new OleDbDataAdapter(query, excelConnection);
//Creamos una tabla
DataTable dTable = new DataTable();
OleDbConnection excelConnection = new OleDbConnection(connectionString);
//Lo abrimos
excelConnection.Open();
//Creamos un Data Adapter que extraiga los datos necesarios(todos) del provider
OleDbDataAdapter data = new OleDbDataAdapter(query, excelConnection);
//Creamos una tabla
DataTable dTable = new DataTable();
//Usando el Data Adapter que tiene los datos seleccionados, rellenamos la tabla.
data.Fill(dTable);
data.Fill(dTable);
// Conectamos el BindingSource con la Tabla.
dBSource.DataSource = dTable;
dBSource.DataSource = dTable;
// Conectamos el DataGridView con el BindingSource
dGVExcel.DataSource = dBSource;
dGVExcel.DataSource = dBSource;
Si compilamos y ejecutamos el proyecto deberíamos obtener una pantalla similar a esta:
A partir de aquí ya podemos trabajar con los datos en nuestra aplicación VS.
No hay comentarios:
Publicar un comentario