En muchas ocasiones, cuando creamos aplicaciones que manejan bases de datos de tipo SQL, el cliente nos pregunta si no podemos cargar los datos de la base de datos desde una Hoja de Cálculo Excel para agilizar la carga de datos, ya que él la tiene en ese formato.
Nuestras aplicaciones pueden tener como valor agregado la capacidad de poder importar datos desde Excel.
Este es precisamente el código que les traigo a continuación en C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
//Agregar referencia a esta DLL si va cargar los datos de la tabla de Excel a SQL Server
using dBData;
namespace ImportarExcel
{
public partial class FrmImportar : Form
{
public FrmImportar()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Creamos un objeto OpenDialog que es un cuadro de dialogo para buscar archivos
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Archivos de Excel (*.xls;*.xlsx)|*.xls;*.xlsx"; //Le indicamos el tipo de filtro en este caso que busque
//solo los archivos excel
dialog.Title = "Seleccione el archivo de Excel";//Le damos un titulo a la ventana
dialog.FileName = string.Empty;//Inicializamos con vacio el nombre del archivo
//Si al seleccionar el archivo damos Ok
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//El nombre del archivo sera asignado al textbox
txtArchivo.Text = dialog.FileName;
string hoja = "Plan1"; //La variable hoja tendra el valor del textbox donde colocamos el nombre de la hoja
LLenarGrid(txtArchivo.Text, hoja); //Se manda a llamar al metodo
DGV1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; //Se ajustan las
//columnas al ancho del DataGridview para que no quede espacio en blanco (opcional)
}
}
private void LLenarGrid(string archivo, string hoja)
{
//declaramos las variables
OleDbConnection conexion = null;
DataSet dataSet = null;
OleDbDataAdapter dataAdapter = null;
string consultaHojaExcel = "Select * from [" + hoja + "$]";
//esta cadena es para archivos excel 2007 y 2010
//string cadenaConexionArchivoExcel = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + archivo + "';Extended Properties=Excel 12.0;";
//string cadenaConexionArchivoExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + archivo + "';Extended Properties=Excel 8.0;";
//para archivos de 97-2003 usar la siguiente cadena
string cadenaConexionArchivoExcel = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + archivo + "';Extended Properties=Excel 8.0;";
//Validamos que el usuario ingrese el nombre de la hoja del archivo de excel a leer
if (string.IsNullOrEmpty(hoja))
{
MessageBox.Show("No hay una hoja para leer");
}
else
{
try
{
//Si el usuario escribio el nombre de la hoja se procedera con la busqueda
conexion = new OleDbConnection(cadenaConexionArchivoExcel);//Creamos la conexion con la hoja de excel
conexion.Open(); //Abrimos la conexion
dataAdapter = new OleDbDataAdapter(consultaHojaExcel, conexion); //Traemos los datos de la hoja y las guardamos en un dataAdapter
dataSet = new DataSet(); // Creamos la instancia del objeto DataSet
dataAdapter.Fill(dataSet, hoja);//Llenamos el dataset
DGV1.DataSource = dataSet.Tables[0]; //Le asignamos al DataGridView el contenido del dataSet
conexion.Close();//Cerramos la conexion
DGV1.AllowUserToAddRows = false;//Eliminamos la ultima fila del datagridview que se autoagrega
}
catch (Exception ex)
{
//En caso de haber una excepcion que nos mande un mensaje de error:
//MessageBox.Show("Error, Verificar el archivo o el nombre de la hoja", ex.Message);
MessageBox.Show(ex.ToString());
}
}
}
private void BotCargarDatos_Click(object sender, EventArgs e)
{
string CC = @"Data Source=NombreServidor;Initial Catalog=NombreBaseDeDatos;Persist Security Info=True;User ID=Usuario;Password=password";
for (int i = 0; i < DGV1.Rows.Count; i++)
{
//Si va a insertar los datos:
//Datos.Insertar(CC, "NombreTabla", "Contrato, Filial", "'" + DGV1["Contrato",i].ToString() + "', '" + DGV1["Filial",i].ToString() + "'"
//Si va a actualizar los datos
string SET = "Contrato = '" + DGV1["Contrato", i].Value.ToString().Trim() + "', Filial = '" + DGV1["Filial", i].Value.ToString().Trim() + "'";
string Condicion = "Contenedor = '" + DGV1["Container", i].Value.ToString().Trim() + "' AND Activo = 'True' AND BCampo4 = 'False' OR BCampo4 IS NULL";
Datos.Actualizar(CC, "NombreTabla", SET, Condicion);
if (Datos.Mensaje != "")
{
MessageBox.Show(Datos.Mensaje);
}
}
MessageBox.Show("Finalizado");
}
}
}
Código completo listo para descargar aqui:



No hay comentarios.:
Publicar un comentario