您的位置:首页 > 科技 > IT业 > 里面云智能建站_小制作小发明大全_产品营销推广方案_百度网站下载

里面云智能建站_小制作小发明大全_产品营销推广方案_百度网站下载

2025/4/5 5:57:33 来源:https://blog.csdn.net/a876106354/article/details/144415461  浏览:    关键词:里面云智能建站_小制作小发明大全_产品营销推广方案_百度网站下载
里面云智能建站_小制作小发明大全_产品营销推广方案_百度网站下载

一、MiniExcel的介绍

       ‌ 是一个简单、高效的.NET库,专门用于处理Excel文件的读写和模板填充操作,旨在避免内存溢出(OOM)问题。它通过使用流(Stream)的方式进行底层算法设计,能够显著减少内存占用,通常可以将原本需要1000多MB的内存占用降低到几MB,从而有效避免内存不足的情况‌。

二、MiniExcel的特点

  • 低内存消耗,避免OOM和完整的GC。
  • 支持对每行数据进行实时操作。
  • 支持LINQ延迟执行,可以实现低消耗、快速分页等复杂查询。
  • 轻量级,无需安装Microsoft Office,无COM+,DLL大小小于150KB。
  • 易于使用的API风格,用于读写填充Excel。

三、MiniExcel的安装使用

安装

你可以通过NuGet安装MiniExcel包。

导入/查询Excel
  • Query查询Excel:返回强类型的IEnumerable数据。
public class UserAccount
{public Guid ID { get; set; }public string Name { get; set; }public DateTime BoD { get; set; }public int Age { get; set; }public bool VIP { get; set; }public decimal Points { get; set; }
}
var rows = MiniExcel.Query<UserAccount>(path);

支持延迟加载:可以配合LINQ进行低消耗、高效率的复杂查询。

var row = MiniExcel.Query(path).First();

导出/创建Excel
  • 支持集合<匿名类别>或是<强型别>
MiniExcel.SaveAs(path, new[] {new { Column1 = "MiniExcel", Column2 = 1 },new { Column1 = "Github", Column2 = 2}
});

IDataReader:推荐使用,可以避免载入全部数据到内存。

MiniExcel.SaveAs(path, reader);

支持Stream:生成文件不落地。

using (var stream = new MemoryStream()) {stream.SaveAs(values);
}

创建多个工作表(Sheet)
var users = new[] { new { Name = "Jack", Age = 25 }, new { Name = "Mike", Age = 44 } };
var department = new[] { new { ID = "01", Name = "HR" }, new { ID = "02", Name = "IT" } };
var sheets = new Dictionary<string, object>
{["users"] = users,["department"] = department
};
MiniExcel.SaveAs(path, sheets);
模板填充Excel
  • 基本填充
var value = new
{Name = "Jack",CreateDate = new DateTime(2021, 01, 01),VIP = true,Points = 123
};
MiniExcel.SaveAsByTemplate(path, templatePath, value);

四、MiniExcel库的详细用法

1. 查询数据以第一行数据当Key

你可以使用useHeaderRow: true参数,使得第一行数据作为键值。例如:

var rows = MiniExcel.Query(useHeaderRow: true).ToList();

这样,rows中的每个元素都将是一个字典,键为列名,值为对应的数据。

2. Query查询支持延迟加载(Deferred Execution)

MiniExcel支持LINQ的延迟加载,可以配合LINQ的FirstTakeSkip等方法实现低消耗、高效率的复杂查询。例如,查询第一笔数据:

var row = MiniExcel.Query(path).First();

或者使用流:

using (var stream = File.OpenRead(path))
{var row = stream.Query().First();
}

3. 查询指定Sheet名称

可以指定查询特定的Sheet:

MiniExcel.Query(path, sheetName: "SheetName");

或者使用流:

stream.Query(sheetName: "SheetName");

4. 查询所有Sheet名称和数据

可以获取所有Sheet的名称和数据:

var sheetNames = MiniExcel.GetSheetNames(path);
foreach (var sheetName in sheetNames)
{var rows = MiniExcel.Query(path, sheetName: sheetName);
}

5. 查询所有列

可以获取所有列的名称:

var columns = MiniExcel.GetColumns(path); // e.g result : ["A","B"...]

或者使用useHeaderRow: true获取实际的列名称:

var columns = MiniExcel.GetColumns(path, useHeaderRow: true);

6. Dynamic Query转换成IDictionary<string,object>数据

可以将查询结果转换为字典形式:

foreach(IDictionary<string,object> row in MiniExcel.Query(path))
{//..
}

或者使用LINQ:

var rows = MiniExcel.Query(path).Cast<IDictionary<string,object>>();

7. 指定单元格开始读取数据

可以指定从某个单元格开始读取数据:

MiniExcel.Query(path, useHeaderRow: true, startCell: "B3");

8. 合并的单元格填充

MiniExcel支持合并单元格的填充,但效率相对较低:

// 具体用法请参考MiniExcel官方文档

9. 多工作表(Sheet)操作

可以创建包含多个工作表的Excel文件:

var sheets = new Dictionary<string, object>
{["users"] = users,["department"] = department
};
MiniExcel.SaveAs(path, sheets);

10. AutoFilter筛选

MiniExcel支持AutoFilter筛选功能,具体用法请参考官方文档。

11. 流式导出Excel

支持流式导出,生成文件不落地:

using (var stream = new MemoryStream())
{stream.SaveAs(values);
}

12. 垂直合并相同的单元格

MiniExcel支持垂直合并相同的单元格,具体用法请参考官方文档。

13. 是否写入null值单元格

MiniExcel允许配置是否写入null值的单元格,具体配置方法请参考官方文档。

以上是MiniExcel的一些高级用法,更多详细用法和配置选项,可以参考MiniExcel的官方文档和GitHub页面。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com