【问题标题】:Export to Excel Error导出到 Excel 错误
【发布时间】: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


【解决方案1】:

我在 PageLoad() 中添加了以下内容,现在可以导出:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.btnExportToExcel);

看起来UpdatePanelScriptManager 是我忽略的元素。当我将功能从主应用程序中分离出来时,我并没有包含主应用程序中的所有 HTML。由于ScriptManagerUpdatePanel 不是独立功能的一部分,因此它可以正常工作。下次我一定会发布HTML

这是来自以下帖子的解决方案:

Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed

【讨论】:

    【解决方案2】:

    我建议使用众多优秀的免费 C#“导出到 Excel”库之一。

    您已经编写了将DataView 读入DataTable 的代码,一旦采用这种格式,请使用以下免费的 C# 库...

    ExportToExcel library

    ...您可以在一行代码中将数据导出到“真正的”Excel 2007 文件中...

    //  Export the DataTable into an Excel file, and write it to the web Response
    CreateExcelFile.CreateExcelDocument(dt, "SomeFilename.xlsx", Response);
    

    好的,好的,两行代码。我添加了一条评论。

    但你明白了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多