导出巨大的 Excel 文件时 'System.OutOfMemoryException' 发生在 mscorlib.dll
'System.OutOfMemoryException' occurred in mscorlib.dll when exporting huge Excel file
我正在尝试使用 EPPlus 导出包含 1,800,000 多行数据和 9 列的 Excel 文件。我使用了一个数据集并将其分成批次(每个数据表 100,000 个)。目前,它最多可以导出 1,000,000 行。
下面是我的导出代码:
public FileContentResult ExportInventory()
{
DataSet dsInventory = Session["Live_Inventory"] as DataSet;
var filename = "Excel Inventory.xlsx";
var excelContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
byte[] excelContent = ExportExcel(dsInventory);
return File(excelContent, excelContentType, filename);
}
public byte[] ExportExcel(DataSet dsInventory)
{
byte[] result = null;
ExcelWorksheet workSheet = null;
var package = new ExcelPackage();
for (int tbl = 1; tbl <= dsInventory.Table.Count; tbl++)
{
workSheet = package.Workbook.Worksheets.Add(String.Format("Sheet " + tbl));
workSheet.Cells["A1"].LoadFromDataTable(dsInventory.Tables[tbl], true);
}
result = package.GetAsByteArray();//Exception occurs here when table count > 10
return result;
}
更新答案:
你应该看看这个:Export large data to an exel file
这绝对能帮到你。
public void DataToExcel(DataTable dataToConvert, HttpResponse response)
{
FileInfo myFile = new FileInfo("~/MyProject/Inventory.xlsx");
using (ExcelPackage package = new ExcelPackage(myFile))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].LoadFromDataTable(dataToConvert, true, OfficeOpenXml.Table.TableStyles.Light1);
package.Save();
response.Clear();
response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", "Inventory.xlsx"));
response.WriteFile("~/MyProject/Inventory.xlsx");
response.Flush();
response.End();
}
}
我正在尝试使用 EPPlus 导出包含 1,800,000 多行数据和 9 列的 Excel 文件。我使用了一个数据集并将其分成批次(每个数据表 100,000 个)。目前,它最多可以导出 1,000,000 行。
下面是我的导出代码:
public FileContentResult ExportInventory()
{
DataSet dsInventory = Session["Live_Inventory"] as DataSet;
var filename = "Excel Inventory.xlsx";
var excelContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
byte[] excelContent = ExportExcel(dsInventory);
return File(excelContent, excelContentType, filename);
}
public byte[] ExportExcel(DataSet dsInventory)
{
byte[] result = null;
ExcelWorksheet workSheet = null;
var package = new ExcelPackage();
for (int tbl = 1; tbl <= dsInventory.Table.Count; tbl++)
{
workSheet = package.Workbook.Worksheets.Add(String.Format("Sheet " + tbl));
workSheet.Cells["A1"].LoadFromDataTable(dsInventory.Tables[tbl], true);
}
result = package.GetAsByteArray();//Exception occurs here when table count > 10
return result;
}
更新答案:
你应该看看这个:Export large data to an exel file
这绝对能帮到你。
public void DataToExcel(DataTable dataToConvert, HttpResponse response)
{
FileInfo myFile = new FileInfo("~/MyProject/Inventory.xlsx");
using (ExcelPackage package = new ExcelPackage(myFile))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].LoadFromDataTable(dataToConvert, true, OfficeOpenXml.Table.TableStyles.Light1);
package.Save();
response.Clear();
response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", "Inventory.xlsx"));
response.WriteFile("~/MyProject/Inventory.xlsx");
response.Flush();
response.End();
}
}