Excel 2008 Cant Parse HTML

Posted by VictorV on Stack Overflow See other posts from Stack Overflow or by VictorV
Published on 2010-03-05T14:03:06Z Indexed on 2010/03/28 23:33 UTC
Read the original article Hit count: 201

Filed under:
|
|
|
|

I need to export a gridview to excel, I put the return html code from the gridview to a HtmlTextWriter and put this into the response.

The result file work fine in excel, excel can parse the html and the result is readable, work perfect on excel 2003 and 2007, but in some machines with Excel 2008 (MACOS) excel shows only the raw html code and can't process this html code.

Any idea to configure excel?

This is the code to convert:

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(); 
}

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET