使用EPPlus将DataTable导出到Excel
问题的原因是在导出 DataTable 到 Excel 时使用了错误的 HttpContext 对象。解决方法是替换 HttpContext.Current.Response 为 HttpContext.Current,并确保引用了正确的命名空间。以下是修改后的代码:
public void ExporttoExcel(DataTable table, string filename) { System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.ClearContent(); System.Web.HttpContext.Current.Response.ClearHeaders(); System.Web.HttpContext.Current.Response.Buffer = true; System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=GridData.xlsx"); using (ExcelPackage pack = new ExcelPackage()) { ExcelWorksheet ws = pack.Workbook.Worksheets.Add(filename); ws.Cells["A1"].LoadFromDataTable(table, true); var ms = new System.IO.MemoryStream(); pack.SaveAs(ms); ms.WriteTo(System.Web.HttpContext.Current.Response.OutputStream); } System.Web.HttpContext.Current.Response.Flush(); System.Web.HttpContext.Current.Response.End(); }
对于遇到 'System.Web.HttpContextBase' does not contain a definition for 'Current' 错误的人,解决方法是将 HttpContext.Current 替换为 System.Web.HttpContext.Current。详细解决方法可以参考这个链接:http://stackoverflow.com/questions/19431820
问题原因:需要将DataTable导出到Excel文件,并在浏览器的响应中进行下载。
解决方法:使用EPPlus库实现将DataTable导出为Excel文件,并通过浏览器进行下载。
具体代码如下:
Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("Logs.xlsx", System.Text.Encoding.UTF8)); using (ExcelPackage pck = new ExcelPackage()) { ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Logs"); ws.Cells["A1"].LoadFromDataTable(dt, true); var ms = new System.IO.MemoryStream(); pck.SaveAs(ms); ms.WriteTo(Response.OutputStream); }
感谢提供这段代码片段!不需要对"Logs.xlsx"进行URL编码。
问题的出现原因是在使用EPPlus库将DataTable导出到Excel时,当DataTable包含大量行时,导出操作会失败。
解决方法是打开一个新的问题来讨论这种特定情况,可能需要对代码进行进一步优化以处理大量数据的导出。
以下是一个使用EPPlus库将DataTable导出到Excel的示例代码:
using (ExcelPackage pck = new ExcelPackage(newFile)) { ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts"); ws.Cells["A1"].LoadFromDataTable(dataTable, true); pck.Save(); }
这段代码使用ExcelPackage和ExcelWorksheet类来创建一个新的Excel文件,并在其中添加一个名为"Accounts"的工作表。然后,使用LoadFromDataTable方法将DataTable的数据加载到工作表的单元格中,并使用true参数来指定是否包含表头。最后,使用Save方法将Excel文件保存到磁盘上。
这种方法在处理小规模数据时效果很好,但当DataTable包含大量行时,导出操作可能会失败。如果遇到这种情况,可以尝试优化代码或分批导出数据以减少内存消耗。
希望这个解决方案能帮助到你!