2010-03-05 17 views
-1

Je dois exporter un gridview pour exceler, je mets le code html de retour du gridview à un HtmlTextWriter et le mets dans la réponse. Le fichier de résultat fonctionne très bien en Excel, Excel peut analyser le HTML et le résultat est lisible, fonctionne parfaitement sur Excel 2003 et 2007, mais dans certaines machines Excel 2003 (MACOS) Excel montre uniquement le code html brut et peut Ne traitez pas ce code html.Excel 2008 Cant Parse HTML

Une idée pour configurer Excel?

Voici le code à convertir:

public static void ToExcel(GridView gridView, string fileName) 
{ 
    HttpResponse response = HttpContext.Current.Response; 
    response.Clear(); 
    response.Buffer = true; 

    fileName = fileName.Replace(".xls", string.Empty) + ".xls"; 

    response.AddHeader("content-disposition", 
         "attachment;filename=" + fileName); 
    response.Charset = ""; 
    response.ContentEncoding = Encoding.Unicode; 
    response.BinaryWrite(Encoding.Unicode.GetPreamble()); 
    response.ContentType = MimeTypes.GetContentType(fileName); 

    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 
    gridView.AllowPaging = false; 
    //gridView.DataBind(); 

    //Change the Header Row back to white color 
    gridView.HeaderRow.Style.Add("background-color", "#FFFFFF"); 

    //Apply style to Individual Cells 
    for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++) 
    { 
     gridView.HeaderRow.Cells[i].Style.Add("background-color", "yellow");  
    } 

    for (int i = 0; i < gridView.Rows.Count; i++) 
    { 
     GridViewRow row = gridView.Rows[i]; 

     //Change Color back to white 
     row.BackColor = System.Drawing.Color.White; 

     //Apply text style to each Row 
     row.Attributes.Add("class", "textmode"); 

     //Apply style to Individual Cells of Alternating Row 
     if (i % 2 != 0) 
     { 
      for (int j = 0; j < row.Cells.Count; j++) 
      { 
       row.Cells[j].Style.Add("background-color", "#C2D69B"); 
      } 
     } 
    } 

    gridView.RenderControl(hw); 

    //style to format numbers to string 
    string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
    response.Write(style); 
    response.Output.Write(sw.ToString()); 
    response.Flush(); 
    response.End(); 
} 
+0

Essayez une plus grande quantité de programmes d'échantillonnage qui ingèrent ce code HTML. OpenOffice.org serait mon premier candidat test. – Broam

+0

@Broam comment cela aide-t-il un problème Excel Mac OS? – btlog

+0

@btlog Excel/Mac est encore assez différent d'Excel/Windows, jusqu'à la dernière version. Je me demande si le code d'importation HTML est étouffant dans la version Mac. Voir si un autre programme aime le HTML serait de savoir si le problème est Excel/Windows est trop libéral, ou Excel/Mac est trop stricte. – Broam

Répondre

0

En général, l'utilisation d'Excel pour analyser votre code HTML est très fragile. Comme vous avez découvert, la version Mac d'Excel peut avoir des problèmes avec elle. Au lieu de cela, vous devriez envisager d'utiliser Spreadsheet XML ou un moteur comme NPOI pour créer un fichier Excel réel. Avec un document Html ou un document Xml, Excel enverra un avertissement à l'utilisateur lors du téléchargement sur le Web indiquant que le fichier n'est pas du même type que prévu (par exemple, vous avez un fichier Html prétendant être un fichier Excel fichier basé sur le type de contenu.). Si vous créez un fichier Excel réel, vous n'aurez pas les problèmes de compatibilité et les utilisateurs ne recevront pas cet avertissement.

Spreadsheet XML

NPOI

0

Hmm, vous pourriez faire quelque chose comme ...

 Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment;filename=report.xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.xls"; 
     var stringWrite = new System.IO.StringWriter(); 
     var htmlWrite = new HtmlTextWriter(stringWrite); 
     this.gridView.RenderControl(htmlWrite); 
     Response.Write(stringWrite.ToString()); 
     Response.End(); 
+0

En un mot, je fais exactement cela, je teste avec ces codes et html est rendu sur l'Excel 2008, seulement dans Excel 2008 dans certaines machines. – VictorV

0

Excel 2008 pour Mac n'a pas VBA. Je ne sais pas comment les compléments C# (je présume que c'est ce que c'est) fonctionnent s'il n'y a pas d'environnement VBA. Je sais que pour mes fichiers VBA et les compléments, il n'y a rien à faire.

+0

Je certains macs le fichier Excel montre ok. – VictorV

+0

Ont-ils aussi Excel 2008? parce que Excel 2004 (pour les macs) a le support de VBA. – guitarthrower