-1

我需要将gridview 导出到excel,我将gridview 中的返回html 代码放入HtmlTextWriter 并将其放入响应中。

结果文件在 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(); 
}
4

3 回答 3

0

一般来说,依靠 Excel 解析您的 Html 是非常脆弱的。正如您所发现的,Mac 版本的 Excel 可能会遇到问题。相反,您应该考虑使用电子表格 XML 或 NPOI 等引擎来构建实际的 Excel 文件。

对于 Html 文档或 Xml 文档,Excel 会在从 Web 下载文件时向用户发出警告,指出该文件与预期的类型不同(例如,您有一个声称是基于 Excel 文件的 Html 文件内容类型。)。如果您构建一个实际的 Excel 文件,您将不会遇到兼容性问题,用户也不会收到此警告。

电子表格 XML

非营利组织

于 2010-03-28T23:30:40.473 回答
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();
于 2010-03-05T14:38:56.160 回答
0

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

于 2010-03-05T17:27:27.157 回答