我有一个带有网格的用户控件。现在我在网格上方的同一用户网格上添加了一个导出到Excel按钮,使用户能够将相应的网格数据导出到Excel。我在用户控件中的按钮单击甚至t上编写了以下函数。
protected void Home_ExportExcel_Click(object sender, EventArgs args)
{
DataTable resultTbl = new DataTable();
if (this.HomeGridDataSource != null)
resultTbl = this.HomeGridDataSource as DataTable;
Download(resultTbl, this.MasterPage.CurrentLibrary);
}
下载功能是
private void Download(DataTable tb)
{
string attachment = "attachment; filename=HomeGridData" + DateTime.Now.ToString() + ".xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/vnd.ms-excel";
string tab = "";
foreach (DataColumn dc in tb.Columns)
{
Response.Write(tab + dc.ColumnName);
tab = "\t";
}
Response.Write("\n");
int i;
foreach (DataRow dr in tb.Rows)
{
tab = "";
for (i = 0; i < tb.Columns.Count; i++)
{
Response.Write(tab + dr[i].ToString());
tab = "\t";
}
Response.Write("\n");
}
Response.End();
}
现在我以文本格式获得请求的响应,但我需要将其与 Grid 数据一起下载到用户机器。
我还尝试使用Excel样式等生成.xml文件,但我在响应对象中得到了与文本格式相同的结果,但我希望它能被下载。
我在这里缺少什么?
将内容类型设置为Excel文件不足以让客户端将响应视为Excel文件。您的服务器通过文本信息进行响应,这些信息被客户端视为常见响应。即使用户将您的响应保存到Excel文件,该文件也不会符合格式,因为它是文本。解决这个问题的更好方法是使用某些库生成Excel文件。例如。,EPPlus。使用该库,您可以在内存中生成Excel文件(无需在磁盘上创建物理文件),然后使用响应. OutputStream. Writ将其作为流返回。以下主题中是如何通过流\文件响应的一个很好的例子。