• Jueves 2 de Mayo de 2024, 06:18

Autor Tema:  Problema Al Exportar Data Grid A Excel  (Leído 15440 veces)

rpj_accenture

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Problema Al Exportar Data Grid A Excel
« en: Lunes 10 de Enero de 2005, 23:45 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #1 en: Miércoles 12 de Enero de 2005, 11:44 »
0
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.
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

rpj_accenture

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #2 en: Miércoles 12 de Enero de 2005, 22:16 »
0
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

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #3 en: Miércoles 12 de Enero de 2005, 22:54 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #4 en: Jueves 13 de Enero de 2005, 11:27 »
0
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
  1.  
  2. public static void Exportar_a_Excel(System.Web.HttpResponse Response,
  3.         System.Web.UI.WebControls.DataGrid elGrid)
  4.       {
  5.         string strSampleFile = "Ejm2.xls";
  6.         OWC.Spreadsheet objExcel = new OWC.Spreadsheet(); //Referencing Microsoft Office Web Compenents 9.0
  7.  
  8.         //Add the column headers to the excel sheet
  9.         int ColumnCount = 1;
  10.         for( int i = 0; i < elGrid.Columns.Count; i++)
  11.         {
  12.           if(elGrid.Columns[i].Visible)
  13.           {
  14.             objExcel.ActiveSheet.Cells[1, ColumnCount] = elGrid.Columns[i].HeaderText;
  15.             ((OWC.Range)objExcel.ActiveSheet.Cells[1, ColumnCount]).Font.set_Bold(true);
  16.             ColumnCount++;
  17.           }
  18.         }
  19.         objExcel.ActiveSheet.Rows.EntireRow.Font.set_Bold(true);
  20.        
  21.         //Add the values
  22.         for(int i = 0; i < elGrid.Items.Count; i++)
  23.         {
  24.           int col = 1;
  25.           for(int j = 0; j < elGrid.Columns.Count; j++)
  26.           {
  27.             if(elGrid.Columns[j].Visible)
  28.             {
  29.               string val = elGrid.Items[i].Cells[j].Text;
  30.               if(val==null || val=="")
  31.               {
  32.                 if(elGrid.Items[i].Cells[j].Controls[0] is System.Web.UI.WebControls.HyperLink)
  33.                 {
  34.                   val = ((System.Web.UI.WebControls.HyperLink)(elGrid.Items[i].Cells[j].Controls[0])).Text;
  35.                 }
  36.                 else if(elGrid.Items[i].Cells[j].Controls[1] is System.Web.UI.WebControls.TextBox)
  37.                 {
  38.                   val = ((System.Web.UI.WebControls.TextBox)(elGrid.Items[i].Cells[j].Controls[1])).Text;
  39.                 }
  40.               }
  41.               val = val.Replace('\r',' ');
  42.               val = val.Replace('\n',' ');
  43.               val = val.Replace('-','_');
  44.               if(val==" ")
  45.                 val="";
  46.                            
  47.               if(elGrid.Columns[j].HeaderText.ToUpper().IndexOf("FECHA") >= 0)
  48.               {
  49.                 ((OWC.Range)objExcel.ActiveSheet.Cells[i+2,col]).set_NumberFormat("dd/mm/yyyy");
  50.                 objExcel.ActiveSheet.Cells[i+2,col] = Convert.ToDateTime(val);
  51.               }
  52.               else
  53.               {
  54.                 objExcel.ActiveSheet.Cells[i+2,col] = val;
  55.               }
  56.               col++;
  57.             }
  58.           }
  59.         }
  60.  
  61.         //Autofit the columns to make them look pretty
  62.         objExcel.ActiveSheet.Columns.AutoFitColumns();
  63.         objExcel.ActiveSheet.Rows.AutoFitColumns();
  64.  
  65.         //Do any formatting you wish.....
  66.         //objExcel.ActiveSheet.Rows.EntireRow.Font.set_Bold(true);
  67.        
  68.         //This saves the excel file "strSampleFolder" on the server
  69.         string strSampleFolder = "c:\\" + strSampleFile;
  70.         objExcel.ActiveSheet.Export(strSampleFolder, OWC.SheetExportActionEnum.ssExportActionNone);
  71.  
  72.         //This opens the download dialoge box and allows the user
  73.         //to download the excel sheet from the server
  74.         Response.Clear();
  75.         //Response.ContentEncoding = System.Text.Encoding.Unicode;
  76.         Response.ContentType = "application.x-msexcel"; //"application/octet-stream";
  77.         Response.AddHeader("Content-Disposition", "attachment; filename=" + strSampleFile);
  78.         Response.Flush();
  79.         //This command actually transfers the file
  80.         Response.WriteFile(strSampleFolder);
  81.         Response.End();
  82.       }
  83.  
  84.  
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

rpj_accenture

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #5 en: Jueves 13 de Enero de 2005, 21:25 »
0
Algo raro debe de haber, porque si utilizo la primera opción me siguen saliendo las tildes y las ñ mal y si utilizo la segunda me sale el siguiente error:

Exception from HRESULT: 0xE004002A

Muchas gracias.

see07

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #6 en: Viernes 14 de Enero de 2005, 17:36 »
0
Hola:

Parece obvio que hay alguna incompatibilidad respecto al escenario cultural.
 
Quizás puede ser que el servidor y el ASP.NET app no están sincronizados culturalmente.

Aquí hay unos links chéclaos y me dices:

http://www.codeproject.com/csharp/Multilin..._pplication.asp

O puedes visitar:
 
http://msdn.microsoft.com/library/default....ultureTopic.asp

O para una lista de culturas checa:

http://msdn.microsoft.com/library/default....oclasstopic.asp

Si está s en México como yo, el juego de caracteres es: "es-MX"

Prueba un response.write así:
Response.Write( "CurrentCulture is " + CultureInfo.CurrentCulture.Name );

Si no es "es-MX", prueba lo siguiente:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-MX");

Esto forzaría para que se use el idioma correcto.

Espero que funcione...

Mantenme informado (si gustas escribeme a adan4@yahoo.com).

rpj_accenture

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #7 en: Sábado 15 de Enero de 2005, 23:41 »
0
Hola:

Muchas gracias por los links y por la ayuda que me estáis prestando.

Lo que desde el principio me ha parecido muy extraño es que en una página funcione perfectamente y en otra con el mismo código me aparezca el problema.

He probado consultar la cultura y es-ES (soy de España).

El servidor es mi propio ordenador. Estoy ejecutando la aplicación en local.

¿Se te ocurre algo que haya que configurar individualmente en cada página, dataset o datagrid que pudiera provocar esto?

Muchas gracias.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #8 en: Lunes 17 de Enero de 2005, 09:41 »
0
Hola,

Para el ejemplo que te puse yo, se me olvido decir que es necesario agregar una referencia a una dll de Office.

La referencia a agregar se llama: Microsoft Office Web Components 9.0

Para agregarlo, hay que seguir los siguientes pasos en el Visual Studio:

Menú Proyecto --> Agregar referencia...

Sale un dialogo y seleccionamos la pestaña que pone "COM" y de su lista seleccionamos "Microsoft Office Web Components 9.0" y pulsamos el boton seleccionar y luego Aceptar para cerrar el dialogo.

Una vez hecho esto el código anterior debería funcionar (eso creo :P)

Agur.
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

see07

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #9 en: Lunes 17 de Enero de 2005, 17:37 »
0
En el ejemplo que anteriormente te di inserta debajo de esta línea:

Response.ContentType = "application/vnd.ms-excel";

esta otra:

Response.ContentEncoding = System.Text.Encoding.UTF7;

Te aseguro que con esto funciona.

Saludos.  :hola:

A.L.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #10 en: Miércoles 19 de Enero de 2005, 17:12 »
0
Hola,

En vez de dar una solución, vengo con un problema relacionado.

Yo ejecuto Grid.RendeControl() para meter html en una pagina, y tengo el mismo problema con las tildes, Ñs y demás caracteres.

Sabe alguien cual puede ser la solución?

Yo he prbado a poner UTF-7 en el Web config y todo deja de funcionar.

 :whistling:
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #11 en: Jueves 20 de Enero de 2005, 13:08 »
0
Hola a todos,

Esta vez vengo para decir que yo solucione mi problema y os voy a contar como.

Problema Inicial:
En mi aplicación, tengo la posibilidad de mandar correos electronicos. Y hay veces que se debe adjuntar un archivo adjunto. Este archivo adjunto contiene el HTML de un DataGrid.
Cuando ejecutaba Datagrid.RenderControl(), el html resultante contenia las tildes, Ñ,... bien escritas, pero cuando lo pasaba al archivo, se escribian mal.
Al principio, creaba un StreamWriter que se encargada de escribir el HTML en el archivo, y lo creaba con la función File.CreateText.
El problema (parece ser) consistía en que el File.CreateText devuelve un StremWriter en UTF8 y por eso se escribía mal.

Mi solución:
Al ver(debugeando) que el Html del Datagrid tenia las tildes y demas caracteres correctamente, me di cuenta de que lo que fallaba era la escritura del HTML en el archivo. Por eso utilicé otra forma de crear el StreamWriter para que escribiera correctamente.
Utilicé el siguiente constructor:
new StreamWriter(FileName, true, System.Text.Encoding.UTF8)
Ironicamente el StreamWriter tambien utiliza UTF8 de esta manera, pero no se porqué ahora el HTML que se escribe sobre el archivo es correcto :blink:

No se que os puede fallar a vosotros, pero quizá trasteando un poco con los StrinWriter y HtmlWriter se consiga algo.

Suerte  :hola:
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

rpj_accenture

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #12 en: Jueves 20 de Enero de 2005, 15:56 »
0
Muchísimas gracias!!!!!!!!!!!!!!!!!!!!!!!!

Por fin ha funcionado. Era esa la solución, incluir la línea:

Response.ContentEncoding = System.Text.Encoding.UTF7;

Insisto, muchas gracias a todos los que me habéis ayudado.

Guorker, ¿no hay ningún método parecido al de encoding del objeto Response en lo que necesitas?

Un saludo.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #13 en: Jueves 20 de Enero de 2005, 16:36 »
0
Hola,

me alegro mucho de que te haya funcionado!

A mi la verdad que esa solución no me servía, porque yo en vez de enviar el HTML al cliente via http, lo que necesitaba era meter el HTML en un archivo. Pero tal y como he dicho, ya he conseguido que se escriba bien.

Muchas gracias por el interes.
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

see07

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #14 en: Jueves 20 de Enero de 2005, 18:44 »
0
Felicidades a ambos porque ha funcionado lo que no les funcionaba.
Seamos un equipo, como ven, ninguno de nosotros es un experto en esto de C#, pero si conjuntamos esfuerzos, si nos apoyamos unos a otros podemos salir adelante con las cosas que se nos atoren.
A.L.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #15 en: Viernes 21 de Enero de 2005, 13:41 »
0
Bien dicho!
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

rbarrientos

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Problema Al Exportar Data Grid A Excel
« Respuesta #16 en: Jueves 9 de Marzo de 2006, 14:17 »
0
Hola gente como estan? bueno queria consultar si alguien sabe como puedo exportar el excel con textbox, mi codigo es este:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Nuevo Hoja de cálculo de Microsoft Exce.xls");
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.Charset = "UTF-8";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
dataGridDetalle.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

y el error es este:  " El control 'ModSolicitudUC1_dataGridDetalle__ctl2_TextBox1' de tipo 'TextBox' debe colocarse dentro de una etiqueta de formulario con runat=server. " adios gracias