【发布时间】:2015-05-26 14:26:13
【问题描述】:
我正在尝试通过弹出窗口将数据网格导出到 excel。从我的应用程序中删除代码时,我能够成功导出到 excel,但是,当尝试在我的应用程序中使用完全相同的代码导出到 excel 时,我收到以下错误:
来自我的尝试/捕获:
无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部。
...从控制台:
错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。
我的服务器端代码如下:
protected void btnExportToExcel_Click(object sender, EventArgs e)
{
ExportDataSetToExcel();
}
private void ExportDataSetToExcel()
{
try
{
DataTable dt = new DataTable("GridView_Data");
foreach (TableCell cell in gvPatientRoster.HeaderRow.Cells)
{
dt.Columns.Add(cell.Text);
}
foreach (GridViewRow row in gvPatientRoster.Rows)
{
dt.Rows.Add();
for (int i = 0; i < row.Cells.Count; i++)
{
dt.Rows[dt.Rows.Count - 1][i] = row.Cells[i].Text;
}
}
if (dt != null && dt.Rows.Count > 0)
{
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition",
string.Format("attachment; filename=PatientRoster.xls"));
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw =
new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
//Report Header
hw.WriteLine("<b><u><font size='5'>" +
"Patient Roster</font></u></b>");
hw.WriteLine("<br><br>");
//hw.Write(BuildCriteriaString());
hw.WriteLine("<br>");
// Get the HTML for the control.
dgGrid.HeaderStyle.Font.Bold = true;
dgGrid.DataBind();
dgGrid.RenderControl(hw);
// Write the HTML back to the browser.
this.EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}
}
catch (Exception ex)
{
lblErrorMessage.Text = ex.Message;
}
}
【问题讨论】:
-
公平警告:设置 content-disposition 标头不足以强制将文件呈现为 Excel 文件。您需要使用 API 写入 Excel 文件格式,或导出为 CSV。无论哪种方式,您都需要在返回之前将文本写入文件流。
-
您有此类工作流的工作示例吗?我尝试使用 OpenXML 创建 Excel 工作簿。该文件在本地成功创建,但是,在从 Web 服务器使用此方法时遇到问题。如果有帮助,我可以发布从数据网格返回的文本。
-
Exporting to CSV 之前在 Stackoverflow 上已回答。这是我上次有人要求导出时使用的。如果不知道您看到的问题,我不知道如何帮助您处理 OpenXML 生成的工作表。 stackoverflow.com/questions/8530655/…
-
“从我的应用程序中删除代码时,我能够成功导出到 excel,但是,当我尝试在我的应用程序中使用完全相同的代码导出到 excel 时,我收到以下错误”
-
我有 2 个解决方案,一个只有一个 web 表单,其功能是将数据网格导出到 excel,另一个是一个完整的 web 应用程序,有超过 50 个 web 表单,我最终希望这个功能驻留。我创建了第二个解决方案来隔离问题,以确保我的代码准确且有效(隔离时会这样做)。当此功能集成到主应用程序中时,它会引发上述错误。
标签: c# excel export-to-excel