ClosedXML可以批量处理导入/导出Excel数据。但是如果是几十万行的Excel数据甚至更大和海量数据可能会导致内存溢出。
有处理海量Excel数据解决方案么?
有的!海量的Excel数据处理可以用MiniExcel。C# 的MiniExcel是一个轻量级、高性能的.NET 库,专门用于处理 Excel文件。它支持读取和写入.xlsx格式的文件在处理大数据量时具有显著的内存优化优势。
MiniExcel的优势:
低内存消耗
MiniExcel采用Stream方式处理文件,避免了将整个Excel文件加载,到内存中,有效防止了内存溢出问题。
高效的性能
MiniExcel可以结合LINQ处理Excel数据,海量的数据可以进行延迟查询(LINQ的优势)实现快速分页甚至更复杂的查询。
开始MiniExcel的使用
NuGet搜索安装MiniExcel类库

将数据写入Excel
List<User> users = new List<User>();for (int i = 0; i < count; i++){User user = new User();user.Id = i;user.Name = "Akin";users.Add(user);}MiniExcel.SaveAs("C:\\ImportUser.xls", users);
读取Excel数据
var filePath = url;var user = MiniExcel.Query<User>(filePath).ToList();int count = 0;foreach (var item in user){//一些数据处理逻辑Console.WriteLine($"{item.Id},{item.Name}");}
封装写入和读取方法
using MiniExcelLibs;using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;namespace A_MiniExcelJob{internal class Program{staticvoidMain(string[] args){//写入数据Console.WriteLine("数据开始写入");ImportUser(1000000);string path = "C:\\output.xlsx";Export(path);Console.ReadLine();}//将数据写入ExcelpublicstaticvoidImportUser(int count){try{Stopwatch st = new Stopwatch();st.Start();List<User> users = new List<User>();for (int i = 0; i < count; i++){User user = new User();user.Id = i;user.Name = "Akin_" + i;user.Age = 26;user.Depment = "信息技术部";user.Gender = "男";user.Salary =8000;users.Add(user);}MiniExcel.SaveAs("C:\\output.xls", users);st.Stop();Console.WriteLine($"写入数据:{count} Done! 耗时:{st.ElapsedMilliseconds} ms");}catch (Exception ex){throw ex;}}//读取Excel数据publicstaticvoidExport(string url){try{Stopwatch st = new Stopwatch();st.Start();var filePath = url;var user = MiniExcel.Query<User>(filePath).ToList();int count = 0;foreach (var item in user){Console.WriteLine($"{item.Id},{item.Name}");count++;}st.Stop();Console.WriteLine($"读取数据:{count} Done! 耗时:{st.ElapsedMilliseconds} ms");}catch (Exception ex){throw ex;}}}class User{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }public string Gender { get; set; }public string Depment { get; set; }public decimal Salary { get; set; }}}
MiniExcel是一个非常实用的C# Excel操作库,非常适合中小型项目或需要高效处理Excel数据的场景。其简洁的API和出色的性能使其成为开发者的首选工具。