C# y cómo acceder a hojas de Excel xls

Bueno, primero que nada quiero explicar mi ausentismo para con el blog. Había estado muy muy ocupado con la escuela y con el servicio social. Pero ahora que estamos en alerta con esta del virus de la influencia porcina, (para más información de click aquí) tengo suficiente tiempo para poder postear unas cuantas cosas aquí.

Estoy en mi servicio social ando, junto con mi equipo, realizando un sistema de información para un pequeño proyecto para el Instituto Mexicano del Petróleo, del cuál no puedo dar detalles. La persona con la que trabajamos (Dra. Elizabeth Mar) tiene un montón de información más bien mal organizada en unas hojas de cálculo de Excel (.xls) y tenemos que trabajar con dicha información.... Bueno, hicimos nuestro diseño de la base basados en la información obtenida y la requerida, ahora solo faltaba poder migrar la información almacenada en los xls a nuestra base MySQL. Así fue como decidimos usar C# para el desarrollo de nuestra aplicación (una simple aplicación de escritorio, sin servidor; no necesitamos más), pues el entorno que nos da Microsoft en su Visual Studio nos deja interactuar fácilmente y sin dolor con hojas de Excel.

Tuvimos varias opciones para elegir, (como interfaces COM, o add in para Microsoft Office), pero decidimos mejor acceder a la hoja de Excel como una Base de Datos con drivers OLE. Bueno, sin más ni más les dejo un snipet de código muy similar a lo que estamos usando nosotros.


using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Collections.Generic;

....
....

/* La coneccion a la hoja y la extraccion de los datos */
OleDbConnection connection = new OleDbConnection
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
filePath + ";Extended Properties=Excel 8.0");

DataSet dataSet;
OleDbDataAdapter command;

try
{
connection.Open();
}
catch(OleDbException ex)
{
Console.WriteLine(ex.Message);
throw new ImporterException("Error al Abrir la conexion con el " +
"XLS");
}

try
{
dataSet = new DataSet();
command = new OleDbDataAdapter(" SELECT * FROM [" + sheetName + "$]",
connection);

command.Fill(dataSet);
connection.Close();
}
catch (System.Exception ex)
{
throw new ImporterException("Error al extraer los datos de la hoja. " +
"Tal vez estan mal los nombres del xls o de la hoja?.");
}
/* Con este foreach navegamos en cada renglón del XLS */
foreach (DataRow row in dataSet.Tables[0].Rows)
{
/* ahora leemos la primera celda de dicho renglón
y lo imprimimos en consola */
Console.WriteLine(Convert.ToString(row));

}




Y ya, jajaja. Si tienen algún problema, coméntenme y trataré de ayudarlos.

Happy Coding!

0 comentarios: