Search code examples
c#asp.netcssexport-to-excel

How to prevent css missing when exporting some html to excel file?


I am exporting an html table to excel file successfully using following code

    public void exportGridToExcel(Control ctl)
    {
        string attachment = "attachment; filename=etrack_excel_export.xls";
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.AddHeader("content-disposition", attachment);
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        StringWriter stw = new StringWriter();
        HtmlTextWriter htextw = new HtmlTextWriter(stw);

        ctl.RenderControl(htextw);
        HttpContext.Current.Response.Write(stw.ToString());
        HttpContext.Current.Response.End();
    }

The issue is that after exportation all css I have applied to the table is missing in the excel file , How can I prevent the css from missing?


Solution

  • I finally got what to do ! I share It with anyone who has the same issue :

            string attachment = "attachment; filename=etrack_excel_export.xls";
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("content-disposition", attachment);
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            StringWriter stw = new StringWriter();
            HtmlTextWriter htextw = new HtmlTextWriter(stw);
            ctl.RenderControl(htextw);
            HttpContext.Current.Response.Write(stw.ToString());
            FileInfo fi = new FileInfo(Server.MapPath("../Content/Styles/StyleSheet.css"));
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            StreamReader sr = fi.OpenText();
            while (sr.Peek() >= 0)
            {
                sb.Append(sr.ReadLine());
            }
            sr.Close();
            Response.Write("<html><head><style type='text/css'>" + sb.ToString() + "</style></head>" + stw.ToString() + "</html>");
            stw = null;
            htextw = null;
            Response.Flush();
            Response.End();