Exportar Datos a un Archivo xls

Este es mi primer publicación como miembro de Qbit y gracias al brother JACK por su aporte, bueno ahora lo importante……

El problema que se me presentaba era que al intentar de exportar un archivo de XLS el botón llamaba al evento post, El control(botón) en la propiedad de CssClass ejecuta un jquery(dialog), que bloqueaba la pagina para que el usuario no pudiera oprimir algo.

Bien resulta que este no terminaba de ejecutarse, al no saber cuando terminaba el evento post, La solución fue cambiar el button por un Hiperlink el cual abriria una nueva pagina en blanco donde se descargaría el archivo de excel.

Creamos un nuevo sitio web Visual C# y con el NET. FREAMWORK 3.5

Nuevo proyecto

Dentro del proyecto agregaremos una Base de Datos en este ejemplo se llama Exportar.mdf

Nuevo proyecto

Agregaremos una nueva tabla llamada clientes con los campos correspondientes (id de tipo bigint y nombre de varchar(250) los dos no permiten valores nulos) y guardamos la tabla recordar que la tabla se llama “Clientes”

Nuevo proyecto

Ahora bien ya en nuestra pagina Default.aspx agregamos un HyperLink

Nuevo proyecto

Vamos a las propiedades de HyperLink

Importante: que en la propiedad de “NavigateUrl” coloquemos el nombre de la misma pagina “~/Default.aspx” y en “Target” se encuentre “_blank” todo esto para que cuando se abra la pagina esta se encuentre en blanco.

Nuevo proyecto

Ahora insertamos un dropdownlist con las siguientes propiedades

Nuevo proyecto

Dentro del proyecto con el siguiente script que oculta el Hiperlink de inicio

Nota:

.InkExportar Esto significa en el script “ . ” que todo control que tenga en la propiedad de CssClass el nombre del script realizara la funcion

#cmbLista mientras que con el signo de “ # “ significa que el control que tenga el ID el nombre del script realizara esa función

jQuery(function ($) {
$(".lnkExportar").hide();
var baseUrl = $(".lnkExportar").attr("href");
 
$("#cmbLista").change(function () {
if (($(this).val() == "") || ($(this).val() == undefined))
$(".lnkExportar").hide();
else {
$(".lnkExportar").show().attr("href", baseUrl + "?filename=" + $("#cmbLista option:selected").text());
}
});

Todo esto es dentro del codigo de Aspx, para apoder pasar la variable por url y abrir una nueva pagina en blanco al momento de dar clic en link

Buscando en San Google encontre varios metodo para exportar a un archivo de excel el problema fue que perdia registros al exportarlos, el problema es que psando de cierta cantidad de registros un control web no soporta tanto, opte por este metodo

NOTA: Existe un limite en las hojas de excel que es de 65,000 registros despues de esto hay que insertarlos en la hoja siguiente

public void ExportDataSetToExcel(string id , string filename)
{
 DataTable table = exportar(long.Parse(id)).Tables[0];
 
            context.Response.ClearHeaders();
            context.Response.ClearContent();
            context.Response.Clear();
            context.Response.Buffer = true;
 
            context.Response.ContentType = "application/vnd.ms-excel; charset=utf-8";
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=" +        RemoveWhitespace(filename) + ".xls");
 
            context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1252");
            context.Response.Charset = "utf-8";
 
 
 
            foreach (DataColumn column in table.Columns)
            {
                context.Response.Write(column.ColumnName + "\t");
            }
 
            context.Response.Write(Environment.NewLine);
 
 
            foreach (DataRow row in table.Rows)
            {
 
                for (int i = 0; i <= table.Columns.Count - 1; i++)
                {
 
                   context.Response.Write(row[i].ToString() + "\t");
 
                }
                context.Response.Write(Environment.NewLine);
 
 
            }
 
           context.Response.End();

El metodo RemoverEspacios es para que al exportar en el navegador Firefox la cadena(nombre del archivo) que lea y tenga espacios en blanco, le quitara la extencion del archivo, para los demás exploradores no hay problema Google Crhome e Internet Explorer

public string RemoverEspacios(string str)
 
{ try 
 
{  returnnewRegex(@”\s*).Replace(str, string.Empty);
 
  } catch (Exception)
 
  { return str;  }
 
}
private void CargarLista() {
 
   cmbLista.Items.Clear();
 
   cmbLista.Items.Add(newListItem(“Seleccionar”, “”));
 
   cmbLista.Items.Add(newListItem(“Archivo 1″, “1));
 
   cmbLista.Items.Add(newListItem(“Archivo 2″, “2));
 
   cmbLista.Items.Add(newListItem(“Archivo 3″, “3));
 
}
private DataSet exportar() {
 
SqlConnection conn =  new SqlConnection(“Cadena de conexion”);
 
SqlCommand cmd = newSqlCommand(); SqlDataAdapter da = newSqlDataAdapter();
 
conn.Open();   string
 
sQuery = “Select * from Clientes”;
 
da.SelectCommand = new SqlCommand(sQuery, conn);
 
DataSet personasdata = new DataSet();
 
da.Fill(personasdata);
 
conn.Close();
 
return
 
personasdata;
 
}

Por ultimo en el metodo PageLoad donde se encargara al
momento de abrir ejecutar el metodo exportar

protected void Page_Load(object sender, EventArgs e)
 
{    
 
 if (!IsPostBack) {
 
    CargarLista();
 
     if ( (!string.IsNullOrEmpty(Request.QueryString["filename"]))
               ) 
        {   this.ExportDataSetToExcel(
 
                Request.QueryString["id"].ToString() , Request.QueryString["filename"].ToString().Trim() );
 
                 );
 
         }
 
}
 
}

Israel Arizmendi

Aprendiz de starcraft

Twitter Google+ 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook3