ASP.NET下C#读取Excel文件,有好几种方法,我了解到的有:Microsoft.Office.Interop.Excel.dll 、 Microsoft.Jet.OLEDB 、NPOI,其中NPOI应该是用的比较多的吧,我个人来说比较倾向使用NPOI,很方便。不过今天我的一个小伙伴突然微信我,说她现在的公司需要解析一个上百兆的Excel文件,使用NPOI会有内存溢出的问题,即使根据需求将文件大小控制在最小50M以内还是不行,问我有什么办法能解决这个问题。

这个问题虽然我没做深入的了解,但是按照经验来看很可能是NPOI的瓶颈,或者说是她用的这个版本NPOI版本的瓶颈。

那么这个问题怎么解决呢?上菜!

DocumentFormat.OpenXmlSDK

对,没错!就是他,微软提供的一个读取Excel的类库

1、通过NuGet搜索 DocumentFormat.OpenXml

C# 读取 Excel(大文件)

我下载的是第二个,至于为啥是第二个,因为小.... 而且对.NetFramework版本没有依赖

2、解析Excel

 1         /// <summary>
 2         /// 获取Excel指定工作表数据
 3         /// </summary>
 4         /// <param name="filePath">Excel所在路径</param>
 5         /// <param name="sheetName">工作表名</param>
 6         /// <returns></returns>
 7         public static void GetExcelVlaue(string filePath, string sheetName)
 8         {
 9             //打开文件
10             SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false);
11             WorkbookPart workbook = document.WorkbookPart;
12             IEnumerable<Sheet> sheets = document.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName);//此处改成读取第一个sheet页面即可
13             if (sheets.Count() == 0)
14             {
15                 //sheet空判断
16             }
17             WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheets.First().Id);
18             Worksheet worksheet = worksheetPart.Worksheet;
19             IEnumerable<Row> rows = worksheet.Descendants<Row>();
20             foreach (Row row in rows)//获取行的值
21             {
22                 foreach (Cell cell in row)
23                 {
24                     string columnValue = GetValue(cell, workbook.SharedStringTablePart);
25                 }
26             }
27         }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-24
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-28
  • 2021-07-06
  • 2022-12-23
相关资源
相似解决方案