CLR: .Net / Mono / Boo / Otros CLR > C#

 Problema Al Exportar Data Grid A Excel

(1/4) > >>

rpj_accenture:
Hola amigos:

Tengo un problema al exportar un datagrid a excel. Utilizo el siguiente código:

// Preparación
Response.Buffer = false;
Response.ContentType = "application/vnd.ms-excel";
this.EnableViewState = false;
DataGrid1.AllowPaging = false;
DataGrid1.AllowSorting = false;
DataGrid1.DataBind ();

// Escribimos el html que genera el grid en respuesta para enviarlo al cliente
System.IO.StringWriter tw = new System.IO.StringWriter ();
HtmlTextWriter hw = new HtmlTextWriter (tw);
DataGrid1.RenderControl(hw);
Response.Write(tw.ToString());

// Enviamos los datos al cliente
Response.End();

Sin embargo, cuando abro el excel, todas las tildes y ñ no se exportan bien. Por ejemplo, José María --> José María.

Por favor, ¿puede alguien ayudarme?

Muchas gracias.

Güorker:
Hola,

ya he comentado en otra conversación parecida a esta, que yo trabaje en una aplicación Web que exportaba e Excel, pero que en vez de crear una pagina con formato de Excel, lo que hacía era crear una pagina excel (.xls) y que el usuario lo baje o lo habra segun su deseo.
Y de esta forma no tení aproblemas con las Ñ, tildes y demas... aunque había que hacer algunas conversiones en los textos para evitar problemas.

Saludos y Suerte.

rpj_accenture:
Hola:

Muchas gracias por tu respuesta.

¿Tienes algún ejemplo de código donde se haga esto? Soy más o menos nuevo y no lo controlo demasiado.

Gracias por adelantado.

see07:
Hola, te propongo una solución mejor:

Response.Clear();
Response.Buffer= true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=Clientes.xls");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
Response.Write(oStringWriter.ToString());
Response.End();

Esto me funciona bien para un datagrid, las ñ y acentos se muestran bien.

Donde yo tengo problemas es cuando uso un repeater en vez de un datagrid.

Ya puse esto en este foro pero aun no tengo la respuesta de como lograrlo con un repeater.
Saludos
A.L:

Güorker:
Hola,

de la manera que dice see007 está muy bien, pero tal y como lo hago yo se puede dar formato a las celdas (negrita, tamaño de letra,...)

Aqui va un ejemplo de lo que hago (Es bastante más código) :


--- Código: Text --- public static void Exportar_a_Excel(System.Web.HttpResponse Response,         System.Web.UI.WebControls.DataGrid elGrid)      {        string strSampleFile = "Ejm2.xls";        OWC.Spreadsheet objExcel = new OWC.Spreadsheet(); //Referencing Microsoft Office Web Compenents 9.0         //Add the column headers to the excel sheet        int ColumnCount = 1;        for( int i = 0; i < elGrid.Columns.Count; i++)        {          if(elGrid.Columns[i].Visible)          {            objExcel.ActiveSheet.Cells[1, ColumnCount] = elGrid.Columns[i].HeaderText;            ((OWC.Range)objExcel.ActiveSheet.Cells[1, ColumnCount]).Font.set_Bold(true);            ColumnCount++;          }        }        objExcel.ActiveSheet.Rows.EntireRow.Font.set_Bold(true);               //Add the values        for(int i = 0; i < elGrid.Items.Count; i++)        {           int col = 1;          for(int j = 0; j < elGrid.Columns.Count; j++)          {            if(elGrid.Columns[j].Visible)            {              string val = elGrid.Items[i].Cells[j].Text;              if(val==null || val=="")               {                if(elGrid.Items[i].Cells[j].Controls[0] is System.Web.UI.WebControls.HyperLink)                {                  val = ((System.Web.UI.WebControls.HyperLink)(elGrid.Items[i].Cells[j].Controls[0])).Text;                }                else if(elGrid.Items[i].Cells[j].Controls[1] is System.Web.UI.WebControls.TextBox)                {                  val = ((System.Web.UI.WebControls.TextBox)(elGrid.Items[i].Cells[j].Controls[1])).Text;                }              }              val = val.Replace('\r',' ');              val = val.Replace('\n',' ');              val = val.Replace('-','_');              if(val==" ")                val="";                                          if(elGrid.Columns[j].HeaderText.ToUpper().IndexOf("FECHA") >= 0)              {                ((OWC.Range)objExcel.ActiveSheet.Cells[i+2,col]).set_NumberFormat("dd/mm/yyyy");                objExcel.ActiveSheet.Cells[i+2,col] = Convert.ToDateTime(val);              }              else              {                objExcel.ActiveSheet.Cells[i+2,col] = val;              }              col++;            }          }        }         //Autofit the columns to make them look pretty        objExcel.ActiveSheet.Columns.AutoFitColumns();        objExcel.ActiveSheet.Rows.AutoFitColumns();         //Do any formatting you wish.....        //objExcel.ActiveSheet.Rows.EntireRow.Font.set_Bold(true);                //This saves the excel file "strSampleFolder" on the server        string strSampleFolder = "c:\\" + strSampleFile;        objExcel.ActiveSheet.Export(strSampleFolder, OWC.SheetExportActionEnum.ssExportActionNone);         //This opens the download dialoge box and allows the user        //to download the excel sheet from the server        Response.Clear();        //Response.ContentEncoding = System.Text.Encoding.Unicode;        Response.ContentType = "application.x-msexcel"; //"application/octet-stream";        Response.AddHeader("Content-Disposition", "attachment; filename=" + strSampleFile);        Response.Flush();        //This command actually transfers the file        Response.WriteFile(strSampleFolder);        Response.End();      }  

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa