c# - 无法导出 Excel
问题描述
我有 2 个可能不相关的问题。
我一直无法导出excel表
我在 Response.End() 不断收到此错误
线程被中止
对于第一个问题,我尝试通过执行以下操作来测试代码是否有效
.aspx.cs
private void BindSalesMargin()
{
DataTable dt = new DataTable();
objAcc.CompanyID = Convert.ToInt16(ddlCompany.SelectedValue);
objAcc.LocID = ddlLocation.Text;
objAcc.dtFrom = Calendar1.SelectedDate;
objAcc.dtTo = Calendar2.SelectedDate;
if (ddlResult.SelectedValue == "0")
{
objAcc.Result = "Under,Over,OK";
}
else
{
objAcc.Result = ddlResult.Text;
}
dt = objAcc.Sale_MarginMail();
SalesMargin.DataSource = dt;
SalesMargin.DataBind();
Session["Salesdt"] = dt;
if (((DataTable)Session["Salesdt"]).Rows.Count > 0)
{
grdexport.DataSource = (DataTable)Session["Salesdt"];
grdexport.DataBind();
string filename = "Sales_Margin.xls";
//string excelHeader = "";
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
//hw.WriteLine("<b><u><font size=’3′> " + excelHeader + " </font></u></b>");
bandDiv.RenderControl(hw);
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
Response.ContentType = "application/vnd.ms-excel; charset=ISO-8859-1";
Response.Charset = "UTF-8";
this.EnableViewState = false;
Response.Write(tw.ToString().Replace("NULL", ""));
Response.Write(Response.OutputStream);
Response.Flush();
try
{
Response.End();
//Response.Close();
//HttpContext.Current.ApplicationInstance.CompleteRequest();
//ApplicationInstance.CompleteRequest();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, GetType(), "", "alert(" + ex + ");", true);
}
}
else
{
ScriptManager.RegisterStartupScript(this, GetType(), "", "alert('No data to Export for given details');", true);
}
}
它有效。但不适用于以下代码的按钮单击事件。
.aspx
<div class="value">
<asp:Button ID="Export" runat="server" CssClass="Btn_Export" OnClick="Export_Click" Text="Export sales Margin" />
</div>
.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindCompany();
//txtFrom.Text = DateTime.Now.AddMonths(-1).AddDays(1 - DateTime.Today.Day).ToString("dd-MMM-yyyy");
txtFrom.Text = DateTime.Now.AddDays(1 - DateTime.Today.Day).ToString("dd-MMM-yyyy");
txtTo.Text = DateTime.Now.ToString("dd-MMM-yyyy");
Calendar2.SelectedDate = Convert.ToDateTime(txtTo.Text);
Calendar1.SelectedDate = Convert.ToDateTime(txtFrom.Text);
BindSalesMargin();
}
}
private void BindSalesMargin()
{
DataTable dt = new DataTable();
objAcc.CompanyID = Convert.ToInt16(ddlCompany.SelectedValue);
objAcc.LocID = ddlLocation.Text;
objAcc.dtFrom = Calendar1.SelectedDate;
objAcc.dtTo = Calendar2.SelectedDate;
if (ddlResult.SelectedValue == "0")
{
objAcc.Result = "Under,Over,OK";
}
else
{
objAcc.Result = ddlResult.Text;
}
dt = objAcc.Sale_MarginMail();
SalesMargin.DataSource = dt;
SalesMargin.DataBind();
Session["Salesdt"] = dt;
}
protected void Export_Click(object sender, EventArgs e)
{
if (((DataTable)Session["Salesdt"]).Rows.Count > 0)
{
grdexport.DataSource = (DataTable)Session["Salesdt"];
grdexport.DataBind();
string filename = "Sales_Margin.xls";
//string excelHeader = "";
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
//hw.WriteLine("<b><u><font size=’3′> " + excelHeader + " </font></u></b>");
bandDiv.RenderControl(hw);
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
Response.ContentType = "application/vnd.ms-excel; charset=ISO-8859-1";
Response.Charset = "UTF-8";
this.EnableViewState = false;
Response.Write(tw.ToString().Replace("NULL", ""));
Response.Write(Response.OutputStream);
Response.Flush();
try
{
Response.End();
//Response.Close();
//HttpContext.Current.ApplicationInstance.CompleteRequest();
//ApplicationInstance.CompleteRequest();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, GetType(), "", "alert("+ ex +");", true);
}
}
else
{
ScriptManager.RegisterStartupScript(this, GetType(), "", "alert('No data to Export for given details');", true);
}
}
所以我的问题是为什么它不起作用?为什么它在我必须导出到 excel 的其他类似模块中工作?我该如何解决这个问题?
解决方案
推荐阅读
- javascript - 组件未使用“useEffect”挂钩在 React 中重新渲染
- angular - **build --prod** 时延迟加载不起作用
- winforms - Windows 集成身份验证 Azure AD 和 WinForms
- php - 使用ajax codeigniter的文件上传总是NULL
- kibana - Kibana 禁用仪表板上的自动刷新选项
- php - PHP获取带有值的数组键
- react-native - React 本机动画与 Android 崩溃
- vb.net - 为 sql where 语句存储列表框中的选定项目
- javascript - 渲染动态创建的 React 组件
- javascript - 更新控制 html 的变量时无法读取未定义错误的属性“添加”