我有以下代码从提供的数据表生成 Excel 工作表,我修改它以生成两个 Excel 工作表。
if (dt.Rows.Count > 0)
GenerateExcelSheet(dt);
if (dtSplit.Rows.Count > 0)
GenerateExcelSheet(dtSplit);
private void GenerateExcelSheet(DataTable dt)
{
string fileName = string.Format("Foodlist-{0}.xls", DateTime.Now.ToString("ddMMMyyyy-hh:mm:tt"));
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
Response.ContentType = "application/ms-excel";
//Code
Response.Write("<table>");
//My code goes here
Response.Write("</table>");
Response.End();
}
从上面的代码GenerateExcelSheet(dt);正在执行并下载文件但是
if (dtSplit.Rows.Count > 0)
并且其余代码未执行。经过研究我发现 Response.End();导致当前页面的执行结束。有什么办法可以克服这个问题吗?
Response.End()方法终止当前页面的执行,这就是为什么它后面的代码不被执行。也许您可以添加一个标志来跟踪 Excel 数据是否已生成并发送到客户端。我的意思是;
// Flag to track whether Excel data has been generated
bool excelGenerated = false;
if (dt.Rows.Count > 0)
{
GenerateExcelSheet(dt);
excelGenerated = true;
}
if (dtSplit.Rows.Count > 0)
{
GenerateExcelSheet(dtSplit);
excelGenerated = true;
}
// Only call Response.End() if Excel data has been generated
if (excelGenerated)
Response.End();
private void GenerateExcelSheet(DataTable dt)
{
string fileName = string.Format("Foodlist-{0}.xls", DateTime.Now.ToString("ddMMMyyyy-hh:mm:tt"));
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
Response.ContentType = "application/ms-excel";
//Code
Response.Write("<table>");
//My code goes here
Response.Write("</table>");
}