我必须在excel中存储大约315k行数据,每行15列,并使其可供下载。我正在检索所有数据,然后将其存储在数据表中,然后使用OpenXml将其写入工作簿并发送响应。但由于数据量巨大,我得到异常System.OutOfMemoryException
异常。
当我通过检索大约10万条记录来尝试时,整个过程正常运行没有任何错误。
我在SO上看到了类似的问题,但它是FileStream
,因此MemoryStream
的大小动态设置为
MemoryStream memory = new MemoryStream(fileStream.size())
我想知道是否有办法用DataTable
执行此操作。我相信逐行更新excel表是一个选项,但这将包括大量用于检查数据类型的代码等。
此外,我遇到了很多问题"文件已损坏"通过与此合作。因此,我更喜欢xlsx文件。
protected void DownloadDetailTable_OnClick(object sender, EventArgs e)
{
string value = ddl_AuditEnvironment.SelectedValue;
String connectionString = ConfigurationManager.ConnectionStrings["stagingConnection"].ConnectionString;
// DataTable that stores the result set to be written on an excel.
DataTable dataTableObj = GetAuditData.GetDetailsTable(value, connectionString);
string attachment = "attachment; filename=Summary.xlsx";
DataTable dataTable = new DataTable();
XLWorkbook workbook = new XLWorkbook();
workbook.Worksheets.Add(dataTableObj, "Migrated Records");
using (MemoryStream memory = new MemoryStream())
{
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", attachment);
workbook.SaveAs(memory);
memory.WriteTo(Response.OutputStream);
memory.Close();
Response.End();
}
}