Я пытаюсь экспортировать datagrid для excel через всплывающее окно. При удалении кода из моего приложения я могу успешно экспортировать Excel, но при попытке экспортировать Excel, используя тот же код в моем приложении, я получаю следующие ошибки:Экспорт в Excel Ошибка
Из моего try/catch:
Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов.
... и из консоли:
Ошибка: 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;
}
}
Справедливое предупреждение: настройка заголовка содержимого не достаточна для того, чтобы файл отображался как файл Excel. Вам нужно будет использовать API для записи в формат файла Excel или экспорта в формате CSV. В любом случае вам нужно будет написать текст в поток файлов, прежде чем возвращать его. – maniak1982
У вас есть рабочий пример этого типа рабочего процесса? Я попытался создать книгу Excel с помощью OpenXML. Файл создается успешно локально, однако я сталкиваюсь с проблемами при использовании этого метода с веб-сервера. Я мог бы опубликовать текст, возвращаемый из datagrid, если это поможет. – MTL323
Экспорт в CSV был ранее рассмотрен в Stackoverflow. Это то, что я использовал в прошлый раз, когда кто-то запросил экспорт. Я не знаю, как помочь вам с открытым рабочим столом OpenXML, не зная проблем, которые вы видели. Http: // StackOverflow.com/questions/8530655/export-a-list-of-table-to-csv-file – maniak1982