我知道人们已经问过类似的问题。但解决方案不是我所期待的。对我而言,我们的GridView至少保存了一百万条记录。另外,我们的客户不喜欢Excel 2007的警告消息。由于警告消息,我们不能使用最常见的使用GridView.RenderControl()的方法。所以我们决定尝试OpenXML。但是从我发现的所有示例代码中,为了使用OpenXML创建excel文件,似乎必须循环GridView的每一行&列并写入Excel文件的每个单元格。这将需要很长时间。是否有人知道是否有更好/更快的解决方案?另外,由于安全原因,我们不能使用第三方DLL。谢谢。如何使用c#中的OpenXML将GridView导出为excel?
回答
这里是我用来导出数据表到Excel我创建了一个类public static class Extensions
容纳这些方法
internal static void ExportToXcel_MyDataTable(DataTable dt, string fileName, Page page)
{
var recCount = dt.Rows.Count;
RemoveHtmlSpecialChars(dt);
fileName = string.Format(fileName, DateTime.Now.ToString("MMddyyyy_hhmmss"));
var xlsx = new XLWorkbook();
var ws = xlsx.Worksheets.Add("Some Report Name");
ws.Style.Font.Bold = true;
ws.Cell("C5").Value = "MY TEST EXCEL REPORT";
ws.Cell("C5").Style.Font.FontColor = XLColor.Black;
ws.Cell("C5").Style.Font.SetFontSize(16.0);
ws.Cell("E5").Value = DateTime.Now.ToString("MM/dd/yyyy HH:mm");
ws.Range("C5:E5").Style.Font.SetFontSize(16.0);
ws.Cell("A7").Value = string.Format("{0} Records", recCount);
ws.Style.Font.Bold = false;
ws.Cell(9, 1).InsertTable(dt.AsEnumerable());
ws.Row(9).InsertRowsBelow(1);
// ws.Style.Font.FontColor = XLColor.Gray;
ws.Columns("1-8").AdjustToContents();
ws.Tables.Table(0).ShowAutoFilter = true;
ws.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
DynaGenExcelFile(fileName, page, xlsx);
}
private static void DynaGenExcelFile(string fileName, Page page, XLWorkbook xlsx)
{
page.Response.ClearContent();
page.Response.ClearHeaders();
page.Response.ContentType = "application/vnd.ms-excel";
page.Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.xlsx", fileName));
using (MemoryStream memoryStream = new MemoryStream())
{
xlsx.SaveAs(memoryStream);
memoryStream.WriteTo(page.Response.OutputStream);
}
page.Response.Flush();
page.Response.End();
}
的方法如果您在DataTable中有HTML /特殊字符此方法将删除它们替换该行用的String.Empty
/// <summary>
/// Remove all HTML special characters from datatable field if they are present
/// </summary>
/// <param name="dt"></param>
private static void RemoveHtmlSpecialChars(DataTable dt)
{
for (int rows = 0; rows < dt.Rows.Count; rows++)
{
for (int column = 0; column < dt.Columns.Count; column++)
{
dt.Rows[rows][column] = dt.Rows[rows][column].ToString().Replace(" ", string.Empty);
}
}
}
谢谢MethodMan。 – GLP
我不确定我是否也可以使用ClosedXML。我从这个网站http://mikesknowledgebase.azurewebsites.net/pages/CSharp/ExportToExcel.htm找到了一个解决方案,这非常有帮助。基本上它使用OpenXMLWriter写入Excel文件。但是我注意到我的内存使用率仍然高达20%,我想知道我能做些什么来改进它。 – GLP
你怎么不能使用ClosedXML ..如果你可以使用OpenXML,你一定可以使用ClosedXML我注意到在使用ClosedXML时没有内存问题..如果你没有显示任何现有的代码,很难知道你遇到什么内存问题关于你如何使用它.. – MethodMan
- 1. 如何使用c#导出为excel?
- 2. 将gridview导出为excel表格
- 3. 将gridview行导出为excel表
- 4. 使用Openxml将巨大的xml导出为excel
- 5. 使用openxml将多个项目导出为excel
- 6. 将gridview导出为excel而不使用gridview格式化VB
- 7. 如何在C#中使用Linq将数据导出为excel
- 8. 在asp.net中使用openxml导出为excel
- 9. 将XmlDocument导出为excel
- 10. 从Gridview数据导出为excel
- 11. 如何将jqgrid导出为excel?
- 12. 使用Interop Excel将gridview导出为excel
- 13. 如何将gridview导出为excel并排除页脚
- 14. 在C#中导出为excel错误
- 15. 如何在JasperReports中导出为excel?
- 16. C#导出为excel前导零
- 17. 节点导出为excel
- 18. php + jqgrid +导出为excel
- 19. 导出为excel vb.net
- 20. SSIS导出为excel
- 21. 访问导出为excel
- 22. Dojo DataGrid导出为excel
- 23. Java servlet - 导出为excel
- 24. php表导出为excel
- 25. datagridview导出为excel
- 26. Telerik:Radgridview导出为excel
- 27. KendoUI导出为excel
- 28. 导出为excel问题
- 29. Rave Reports导出为excel
- 30. ExtJS Gridpanel导出为excel
数据,需要从'.xls'在你的代码更改文件类型为'.xlsx'我可以张贴在如何做到这一点使用'ClosedXML'但是'1 million'为例行数很多,从我的理解Excel的数量方面有69k的限制的行..但我可以发布我做什么,你可以测试它..我目前这样做,它的作品就像一个魅力..也没有这么难,更不用说还有其他方法来保存数据datable到Excel ..我已经在这里发布一些以及在Stackoverflow – MethodMan
也可以告诉我们你自从你说什么以来你已经尝试了什么,你正在寻找的是以前的任何发现/解决方案,你已经找到 – MethodMan
@MethodMan:你的示例代码片段会有用。我想指出的是,从2007版开始,Excel工作表包含1048576行,因此可按OP中所述完成任务。最好的问候, –