Translate

martes, 19 de noviembre de 2013

Visual Studio C#: Cargar un excel en un DataGridView

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”"”;

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();
//Usando el Data Adapter que tiene los datos seleccionados, rellenamos la tabla.
data.Fill(dTable);
// Conectamos el BindingSource con la Tabla.
dBSource.DataSource = dTable;
// Conectamos el DataGridView con el BindingSource
dGVExcel.DataSource = dBSource;

Si compilamos y ejecutamos el proyecto deberíamos obtener una pantalla similar a esta:

Capture

A partir de aquí ya podemos trabajar con los datos en nuestra aplicación VS.


No hay comentarios: