2010-03-05 35 views
-1

我需要将gridview导出为ex​​cel,我将从gridview返回的html代码放到HtmlTextWriter中,并将其放入响应中。Excel 2008无法解析HTML

结果文件在excel中可以正常工作,excel可以解析html,结果是可读的,在excel 2003和2007中工作完美,但在某些带有Excel 2008(MACOS)的计算机上,excel只显示原始html代码,处理这个html代码。

任何想法配置excel?

这是转换代码:

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

尝试摄入这个HTML样本程序的一个较大的量。 OpenOffice.org将成为我的第一个考生。 – Broam 2010-03-05 14:12:34

+0

@Broam这是如何帮助Excel Mac OS的问题? – btlog 2010-03-05 14:19:42

+0

@btlog直到最新版本之前,Excel/Mac仍然与Excel/Windows相当不同。我不知道Mac版本中的HTML导入代码是否窒息。看看另一个程序是否喜欢HTML,会发现问题是Excel/Windows是否过于自由,或者Excel/Mac太严格。 – Broam 2010-03-05 18:37:38

回答

0

一般来说,依靠Excel解析你的Html是非常脆弱的。正如您发现的那样,Mac版Excel可能会遇到麻烦。相反,您应该考虑使用Spreadsheet XML或NPOI等引擎来构建实际的Excel文件。

无论是Html文档还是Xml文档,Excel都会向用户发出警告,告知用户从网络上下载的文件与预期的文件类型不同(例如,您有一个Html文件声称是Excel基于内容类型的文件)。如果您构建实际的Excel文件,则不会出现兼容性问题,用户也不会收到此警告。

Spreadsheet XML

NPOI

0

嗯,你可以这样做......

 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

简而言之,我完全是这样做的,我使用这些代码进行测试,并且html在Excel 2008上呈现,仅在某些计算机上的Excel 2008中呈现。 – VictorV 2010-03-05 14:49:40

0

的Excel 2008 for Mac不具有VBA。如果没有VBA环境,我不知道C#加载项(我认为这是什么)运行。我知道我的VBA文件和加载项没有什么可以完成的。

+0

我有些mac的excel文件显示ok。 – VictorV 2010-03-06 00:43:29

+0

他们是否也有Excel 2008?因为Excel 2004(用于Mac)具有VBA支持。 – guitarthrower 2010-03-06 01:12:49