Algunas veces como programadores nos toca manejar datos de excel en nuestras aplicaciones, pues ahora veremos como hacerlo usando ado.net y un poco de linq.
En este articulo trataremos los siguientes puntos.
Cargar datos de excel en un datagriedview.
Agregar datos a excel.
Buscar registros usando linq.
Usar linq sobre un datatable
Algo importante de aclarar es que para este ejemplo uso un archivo de excel .xls si quieren hacerlo con archivos .xlsx revisar las distintas cadenas de conexión Connection strings for Excel 2007
El ejemplo esta desarrollado con visual estudio 2010 en C# y VB.Net pero para no poner mucho código solo lo explicare en C# pero en mi blog podrán encontrarlo en VB.Net como también la descarga del proyecto en ambos lenguajes.
Nuestro archivo excel llamado DatosExcel.xls tiene lo siguientes datos.
Y nuestra aplicacion tendrá el siguiente diseño.
Las columnas del datagriedview están definidas en tiempo de diseño.
Una vez explicado nuestro diseño veamos el código de nuestro formulario.
Lo primero sera agregar el siguiente namespace.
Ahora veamos como recuperar los datos de excel y mostrarlos en nuestro datagriedview.
Primeramente se establece la cadena de conexión de nuestro archivo a nivel de clase, y luego cree un método que retornara un datatable con los datos y como pueden notar se recuperan los datos de nuestro archivo excel de igual manera como se aria con una bd, algo importante que hay que mencionar es que en la consulta select tenemos [Hoja1$] donde Hoja1 es el nombre de nuestra hoja de excel.
Por ultimo tenemos el método CargarDatos donde lo único que se hace es mostrar los datos que recuperamos en nuestro datagriedview.
Ahora veamos como agregar registros a nuestro archivo excel.
Hacemos un insert de la misma manera que se haría con un bd solo que en este caso indicamos el nombre de nuestra hoja de excel (Hoja1) y el nombre de las columnas. Luego llamamos al método CargarDatos para que vuelva a cargar el datagriedview con los registros ingresados y por ultimo el método Limpiar que lo único que hace es limpiar los textbox después de insertar un registro.
Ahora veamos como usar linq sobre un datatable para obtener datos filtrados en este caso usaremos el sueldo para obtener los datos filtrados.
Lo primero que hacemos es crear un datatable al cual le asignamos todos los datos de nuestro archivo excel (con el método Datos), luego usamos linq para filtrar los datos del datatable y así ahorrarnos el volver hacer otra consulta a nuestra hoja de excel.
Usamos la columna sueldo para filtrar los datos, lo que hacemos con linq es recuperar los registros que sean mayores o iguales al sueldo digitado en el textbox(txtbuscar).
Lo que aparece como comentario es otra manera de obtener los registros filtrados usando expresión lambda.
El ejemplo lo pueden descargar desde mi blog en c# y vb.net
http://cristiantorresalfaro.blogspot.com/2012/07/agregar-y-buscar-datos-en-excel-c-vbnet.html
Eso es todo espero les sirva de algo Saludos desde El Salvador y no olviden seguirme en el blog para ver los artículos mas nuevos de mi blog.
En este articulo trataremos los siguientes puntos.
Cargar datos de excel en un datagriedview.
Agregar datos a excel.
Buscar registros usando linq.
Usar linq sobre un datatable
Algo importante de aclarar es que para este ejemplo uso un archivo de excel .xls si quieren hacerlo con archivos .xlsx revisar las distintas cadenas de conexión Connection strings for Excel 2007
El ejemplo esta desarrollado con visual estudio 2010 en C# y VB.Net pero para no poner mucho código solo lo explicare en C# pero en mi blog podrán encontrarlo en VB.Net como también la descarga del proyecto en ambos lenguajes.
Nuestro archivo excel llamado DatosExcel.xls tiene lo siguientes datos.

Y nuestra aplicacion tendrá el siguiente diseño.

Las columnas del datagriedview están definidas en tiempo de diseño.
Una vez explicado nuestro diseño veamos el código de nuestro formulario.
Lo primero sera agregar el siguiente namespace.
using System.Data.OleDb;
Ahora veamos como recuperar los datos de excel y mostrarlos en nuestro datagriedview.
string cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DatosExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'";
public DataTable Datos()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Nombre");
dt.Columns.Add("Sueldo", typeof(int));
using (OleDbConnection cnn = new OleDbConnection(cn))
{
string sql = "SELECT *FROM [Hoja1$]";
OleDbCommand command = new OleDbCommand(sql, cnn);
OleDbDataAdapter da = new OleDbDataAdapter(command);
da.Fill(dt);
return dt;
}
}
public void CargarDatos()
{
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = Datos();
}
Primeramente se establece la cadena de conexión de nuestro archivo a nivel de clase, y luego cree un método que retornara un datatable con los datos y como pueden notar se recuperan los datos de nuestro archivo excel de igual manera como se aria con una bd, algo importante que hay que mencionar es que en la consulta select tenemos [Hoja1$] donde Hoja1 es el nombre de nuestra hoja de excel.
Por ultimo tenemos el método CargarDatos donde lo único que se hace es mostrar los datos que recuperamos en nuestro datagriedview.
Ahora veamos como agregar registros a nuestro archivo excel.
using (OleDbConnection cnn = new OleDbConnection(cn))
{
cnn.Open();
using (OleDbCommand cmd = cnn.CreateCommand())
{
cmd.CommandText = "INSERT INTO [Hoja1$] (Id,Nombre,Sueldo) values(@id,@nom,@suel)";
cmd.Parameters.AddWithValue("@id", textBox1.Text);
cmd.Parameters.AddWithValue("@nom", textBox2.Text);
cmd.Parameters.AddWithValue("@suel", textBox3.Text);
cmd.ExecuteNonQuery();
MessageBox.Show("Datos Ingresados Correctamente...");
}
cnn.Close();
}
CargarDatos();
Limpiar();
Hacemos un insert de la misma manera que se haría con un bd solo que en este caso indicamos el nombre de nuestra hoja de excel (Hoja1) y el nombre de las columnas. Luego llamamos al método CargarDatos para que vuelva a cargar el datagriedview con los registros ingresados y por ultimo el método Limpiar que lo único que hace es limpiar los textbox después de insertar un registro.
Ahora veamos como usar linq sobre un datatable para obtener datos filtrados en este caso usaremos el sueldo para obtener los datos filtrados.
DataTable dt = Datos();
int sueldo = Convert.ToInt32(txtbuscar.Text);
var query = from datos in dt.AsEnumerable() where datos.Field<int>("Sueldo") >= sueldo select datos;
//var query = dt.AsEnumerable().Where(datos=> datos.Field<int>("Sueldo") >= sueldo);
if(query.Count() > 0)
{
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = query.CopyToDataTable();
}
else
MessageBox.Show("No Se Encontraron Registros");
Lo primero que hacemos es crear un datatable al cual le asignamos todos los datos de nuestro archivo excel (con el método Datos), luego usamos linq para filtrar los datos del datatable y así ahorrarnos el volver hacer otra consulta a nuestra hoja de excel.
var query = from datos in dt.AsEnumerable() where datos.Field<int>("Sueldo") >= sueldo select datos;
Usamos la columna sueldo para filtrar los datos, lo que hacemos con linq es recuperar los registros que sean mayores o iguales al sueldo digitado en el textbox(txtbuscar).
Lo que aparece como comentario es otra manera de obtener los registros filtrados usando expresión lambda.
El ejemplo lo pueden descargar desde mi blog en c# y vb.net
http://cristiantorresalfaro.blogspot.com/2012/07/agregar-y-buscar-datos-en-excel-c-vbnet.html
Eso es todo espero les sirva de algo Saludos desde El Salvador y no olviden seguirme en el blog para ver los artículos mas nuevos de mi blog.
