我有一个html表(非Gridview),没有正确的标题和行。相反,它具有定制的结构和数据。我想将此表导出到Excel。我该如何使用ASP.NET?
标签是固定文本,整数值来自数据库。所以表结构只修改了整数/小数值的变化。
答案 0 :(得分:9)
您希望使用ASP.NET将HTML表格(非Gridview)自定义结构和数据导出到Excel。
尝试以下方法
提供ID
并添加runat="server"
属性
<table id="tbl" runat="server" >
添加以下代码
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文件中),那么请查看我最近发布的类似问题。
答案 4 :(得分:0)
没有自动化方式。但是您可以使用相同的代码来创建表并将其写入输出。如果您将其写为简单的CSV文件,则用户只需单击下载的文件即可将其加载到Excel中。
通过设置正确的标题,您可以指示浏览器将内容视为下载而不是网页。我在this article发布了代码来执行此操作。