【发布时间】:2017-05-04 07:01:30
【问题描述】:
我正在尝试将 gridview 的内容导出到 excelsheet,而 excel 表中始终缺少 gridview 的最后一行。
我认为这可能是由于标题行,但无法弄清楚如何克服这个问题。下面是导出到excel表的代码
private void btnExportToExcel_OnClick(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
using (StringWriter sw = new StringWriter())
{
HtmlTextWriter hw = new HtmlTextWriter(sw);
//To Export all pages
GridView1.AllowPaging = false;
GridView1.RenderControl(hw); //here gridview is not rendering last row
//style to format numbers to string
string style = @"<style> .textmode { } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
}
【问题讨论】:
-
无论如何,您都没有创建 Excel 文件。您正在创建一个 HTML 文件,然后使用 Excel MIME 类型和文件扩展名来提供它。为什么不使用能够生成真实 Excel 文件的库? EPPlus、NPOI、封闭式 XML 或 Office XML SDK?
-
即使我将其渲染为 HTML 或 iTextSharp 等外部第三方工具,Gridview1.RenderControl(hw) 也会由于某种原因跳过最后一行
-
如果你使用我上面提到的其中一个库直接导出数据源而不是通过GridView,你就不会遇到这个问题。
-
我的工作需要最少的第三方工具依赖。由于我能够导出并获取 excel 文件,可能是一些小的代码更改可能会修复它并满足要求
-
这太荒谬了。你应该让他们清楚你的用例:你需要生成实际有效的 Excel 文件,而不是 hacky junk。重新发明轮子是危险的,浪费你和公司的时间。反正Office XML SDK是微软提供的,可能他们不会认为是第3方。