使用NPOI读取EXCEL数据量大超过65535行引起OutOfMemoryException的解决办法
·
引起问题的原因:是NPOI没办法读取数据量过大的EXCEL会导致内存溢出的问题。
解决方法是参展使用OpenXml操作Excel,创建Excel,导入DataTable的数据_呼噜噜哟的博客-CSDN博客
这位博主的使用OpenXml的方式来读取EXCEL
代码如下
public void Gte( string filePath)
{
try
{
DataTable dt = new DataTable();
using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(filePath, false))
{
WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
string relationshipId = sheets.First().Id.Value = sheets.First(x => x.Name == "Sheet1").Id.Value;
WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);
Worksheet workSheet = worksheetPart.Worksheet;
SheetData sheetData = workSheet.GetFirstChild<SheetData>();
Row[] rows = sheetData.Descendants<Row>().ToArray();
int count = rows.Count();
// 设置表头DataTable
foreach (Cell cell in rows.ElementAt(1))
{
dt.Columns.Add((string)GetCellValue(spreadSheetDocument, cell));
}
for (int rowIndex = 2; rowIndex < rows.Count(); rowIndex++)
{
DataRow tempRow = dt.NewRow();
string sql = "";
for (int i = 0; i < rows[rowIndex].Descendants<Cell>().Count(); i++)
{
string str = GetCellValue(spreadSheetDocument, rows[rowIndex].Descendants<Cell>().ElementAt(i));
}
}
}
}
catch (Exception ex)
{
throw;
}
}
public static string GetCellValue(SpreadsheetDocument document, Cell cell)
{
SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart;
string value = cell.CellValue.InnerXml;
if (cell.DataType != null && (cell.DataType.Value == CellValues.SharedString || cell.DataType.Value == CellValues.String || cell.DataType.Value == CellValues.Number))
{
return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
}
else //浮点数和日期对应的cell.DataType都为NULL
{
// DateTime.FromOADate((double.Parse(value)); 如果确定是日期就可以直接用过该方法转换为日期对象,可是无法确定DataType==NULL的时候这个CELL 数据到底是浮点型还是日期.(日期被自动转换为浮点
return value;
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)