¡Bienvenid@ a La bloguera.net! Iniciar sesión | ÚNETE a la web | Ayuda

Leyendo un hoja de excel con Visual C#

Les cuento estos dias un cliente me pidio que una tarea, consistia en lo siguiente, leer un hoja de calculo de excel y actualizar una tabla, esto es porque las listas de precio que le entregan sus proveedores son en excel.

Como sabemos los archivos de Microsoft Excel, son libros formados por varias hojas de calculos dentro de un solo archivo, ver figura 1


Los archivos de excel lo manejamos con el namespace "System.Data.OleDb".

Crearemos un dataset y un providerfactories el cual utilizaremos para leer es esquela del libro de excel:

DataSet dsMsExcel = new DataSet();
DbProviderFactory
factory = DbProviderFactories.GetFactory("System.Data.OleDb");
 

Con esta instrución leeremos el esquema del libro de excel 

    try

   {

DataTable worksheets;

DbConnection connection = factory.CreateConnection();

connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.txtRutaArchivo.Text + ";Extended Properties=Excel 8.0;";

connection.ConnectionString = connectionString;

connection.Open();

worksheets = connection.GetSchema("Tables");

this.dGridViewTabla.DataSource = worksheets;

   }

   catch (Exception)

   {

MessageBox.Show("Se produjo un error. Puede ser que la hoja de calculo a abrir no exista o posea un esquema diferente.");

   }

 

una vez leido el esquema del libro de excel, leeremos el esquema de la hoja, para obtener las calumnas. Mediante la siguiente instrucción obtendremos lo mencionado.
 
try

{

DataTable columns;

string[] restrictions = { null, null, this.txtHolaExcel.Text, null };

DbConnection connection = factory.CreateConnection();

connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.txtRutaArchivo.Text + ";Extended Properties=Excel 8.0;";

connection.ConnectionString = connectionString;

connection.Open();

columns = connection.GetSchema("Columns", restrictions);

this.dGridViewColumns.DataSource = columns;

}

catch (Exception)

{

MessageBox.Show("Se produjo un error. Puede ser que la hoja de calculo a abrir no exista o posea un esquema diferente.");

}

 

leeremos los datos de la hoja de calculo de excel, con la siguiente instrucción como siempre lo mostraremos en un DataGridView

 

try

{

connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.txtRutaArchivo.Text + ";Extended Properties=Excel 8.0;";

DbDataAdapter adapter = factory.CreateDataAdapter();

DbCommand selectCommand = factory.CreateCommand();

string losCampos = string.Empty;

// Introdusco los campos en una listbox, para luego leerlo y armar una instrucción sql con los datos a buscar.

foreach (string theCampo in this.lstCampo.Items)

{

losCampos += (theCampo + ", ");

}

losCampos = losCampos.Remove(losCampos.Length - 2, 2);

//selectCommand.CommandText = "SELECT Codigo, Descripcion, Categoria, CodigoBarras FROM [Enero$]";

selectCommand.CommandText = "SELECT " + losCampos + " FROM [" + this.txtHolaExcel.Text + "]";

DbConnection connection = factory.CreateConnection();

connection.ConnectionString = connectionString;

selectCommand.Connection = connection;

adapter.SelectCommand = selectCommand;

this.dsMsExcel.Tables.Clear();

adapter.Fill(this.dsMsExcel);

dGridViewDatos.DataSource = this.dsMsExcel.Tables[0];

}

catch (Exception ex1)

{

MessageBox.Show(ex1.Message + "Se produjo un error.");

}

 Y al final obtendremos algo como esto.

 

como vemos realmente es muy facil leer un archivo de excel, com ADO.NET, utilice la ayuda del blog de David Hayden, para conseguir ciertos truquillos...

Publicado sábado, 14 de abril de 2007 20:11 por elperucho
Archivado en: ,

Comentarios

# re: Leyendo un hoja de excel con Visual C#

Prácticamente es lo que estoy intentando hacer estos días, a ver si me pongo más en serio y aporto algo de Excel o de Word 2003.

El lunes me pondré a ello con este post, que los findes son míos ;)

Un saludo!

sábado, 21 de abril de 2007 13:26 by albaras

# re: Leyendo un hoja de excel con Visual C#

Esperamos a ver que aportas...

Saludos Alberto...!

lunes, 23 de abril de 2007 17:15 by elperucho

# re: Leyendo un hoja de excel con Visual C#

Es justo lo que necesito en el momento indicado, solo que no me funciona y me manda un monton de errores, como que es dsMsExcel, txtHolaExcel.Text y funciona con cualquier office, seria mucho pedir si me puedes mandar el archivo completo para checarlo, por que neta no se en que esoy mal.

Gracias

miércoles, 09 de mayo de 2007 7:07 by eL_aLaN_

# re: Leyendo un hoja de excel con Visual C#

Holas...

Estoy siguiendo el ejemplo que muestran aqui.

sin embargo al tratar de leer el esquema del libro de excel, no m muestra nada en al grilla.

Saben a que se puede deber??

Gracias

domingo, 13 de mayo de 2007 10:13 by Milenita

# re: Leyendo un hoja de excel con Visual C#

Necesito tener instalado Excel en el servidor para poder correrlo?

viernes, 07 de septiembre de 2007 23:44 by Eimar

# re: Leyendo un hoja de excel con Visual C#

Saludos Eimar, realmente no lo se,da la casualidad que las computadoras que tiene la aplicacion ya poseen ms.excel instalado. Dejame saber tu correo electronico y te envio la aplicación para que la pruebes.

Saludos y muy interesante tu pregunta.

El Perucho

Nota: Eso va para todos los que deseen la aplicación, por favor envienme un correo de destino.

domingo, 09 de septiembre de 2007 13:18 by elperucho

# re: Leyendo un hoja de excel con Visual C#

Necesito tener instalado Excel en el servidor para poder correrlo?

No tiene nada que ver que se tenga el ms.excel instalado, ya que el archivo de excel es leido por OleDb, mediante el proveedor de datos Microsoft.Jet.OLEDB.4.0.

miércoles, 14 de noviembre de 2007 18:57 by elperucho

# re: Leyendo un hoja de excel con Visual C#

Gracias a todas las personas que me has solicitado el código. Realmente lo he enviado a más de cincuenta (50) personas. Pero creo que no les ha funcionado - después que lo envió realmente no recibo ningún comentario -

Saludos amigos y gracias a todos.

miércoles, 14 de noviembre de 2007 21:02 by elperucho

# re: Leyendo un hoja de excel con Visual C#

Saludos, hace unos dias vi tu código y no me dio ningún problema. Excelente aportación. Ahora, si quieren entrar más a detalle pueden visitar este link http://support.microsoft.com/kb/257819 ya que se pueden ver cosas que no se mencionan, por ejemplo que no se puede abrir un archivo protegido con contraseña. Cosa que yo tengo que hacer :-(

jueves, 14 de febrero de 2008 2:37 by señor_del_caos

# re: Leyendo un hoja de excel con Visual C#

Hola estoy probando el código logro que lea el documento de Excel y muestre el primer DataGridView del ejemplo pero en el momento que trata de leer la estructura de la hoja se cae quisiera saber si me puedes pasar el código.

Gracias dorlysloaiza@gmail.com

martes, 02 de septiembre de 2008 23:49 by Do1984
No se permiten comentarios de usuarios anónimos