使用ASP.NET将HTML表导出到Excel

时间:2012-02-20 15:56:02

标签: html asp.net html-table export-to-excel

我有一个html表(非Gridview),没有正确的标题和行。相反,它具有定制的结构和数据。我想将此表导出到Excel。我该如何使用ASP.NET? enter image description here

标签是固定文本,整数值来自数据库。所以表结构只修改了整数/小数值的变化。

5 个答案:

答案 0 :(得分:9)

您希望使用ASP.NET将HTML表格(非Gridview)自定义结构和数据导出到Excel。

尝试以下方法

  1. 提供ID并添加runat="server"属性

    <table id="tbl" runat="server" >

  2. 添加以下代码

    Response.ContentType = "application/x-msexcel"; 
    Response.AddHeader("Content-Disposition", "attachment;
    filename=ExcelFile.xls");
    Response.ContentEncoding = Encoding.UTF8; 
    StringWriter tw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(tw);
    tbl.RenderControl(hw);
    Response.Write(tw.ToString());
    Response.End();
    

答案 1 :(得分:4)

您可以使用以下代码:

Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=Print.xls");
Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
Response.Write("<head>");
Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-     8\">");
Response.Write("<!--[if gte mso 9]><xml>");
Response.Write("<x:ExcelWorkbook>");
Response.Write("<x:ExcelWorksheets>");
Response.Write("<x:ExcelWorksheet>");
Response.Write("<x:Name>Report Data</x:Name>");
Response.Write("<x:WorksheetOptions>");
Response.Write("<x:Print>");
Response.Write("<x:ValidPrinterInfo/>");
Response.Write("</x:Print>");
Response.Write("</x:WorksheetOptions>");
Response.Write("</x:ExcelWorksheet>");
Response.Write("</x:ExcelWorksheets>");
Response.Write("</x:ExcelWorkbook>");
Response.Write("</xml>");
Response.Write("<![endif]--> ");
StringWriter tw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(tw);      
tbl.RenderControl(hw);
Response.Write(tw.ToString());
Response.Write("</head>");
Response.flush();

如果您希望导出的输出看起来与UI完全相同,那么建议使用内联css。如果将css类应用于表,则它不会显示在导出的Excel中。

答案 2 :(得分:1)

如果dtReport包含表(即要导出的数据),那么我们可以使用以下LOC将表导出到excel,我们也可以格式化标题

    if (dtReports != null && dtReports.Rows.Count > 0 && !string.IsNullOrEmpty(formName))
            {
                string filename = formName.ToUpper() + ParsConstant.XLS_EXTENSION;
                StringWriter tw = new StringWriter();

                using (HtmlTextWriter hw = new HtmlTextWriter(tw))
                {

                    //Binding Datatable to DataGrid.
                    DataGrid dgGrid = new DataGrid();
                    dgGrid.DataSource = dtReports;
                    dgGrid.DataBind();

                    //Some Properties for the Header
                    dgGrid.HeaderStyle.Font.Bold = true;
                    dgGrid.HeaderStyle.Font.Size = 13;

                    //Get the HTML for the control.
                    dgGrid.RenderControl(hw);


                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
                    //Response.Write("<style> TD { mso-number-format:\\@; } </style>");


                    Response.Write(tw.ToString());
                    Response.End();
                }
            }

使用MSO格式不会避免引导零,但它会将文本转换为不建议执行操作的字符串。

答案 3 :(得分:0)

如果您的数据是数据库(如果不是,您可以存储在XML文件中),那么请查看我最近发布的类似问题。

Writing DataReader Rows to Excel File

答案 4 :(得分:0)

没有自动化方式。但是您可以使用相同的代码来创建表并将其写入输出。如果您将其写为简单的CSV文件,则用户只需单击下载的文件即可将其加载到Excel中。

通过设置正确的标题,您可以指示浏览器将内容视为下载而不是网页。我在this article发布了代码来执行此操作。