WeihanLi.Npoi 1.13.0 更新日志
WeihanLi.Npoi 1.13.0 更新日志
Intro
在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://github.com/WeihanLi/WeihanLi.Npoi/issues/94
从我个人角度来说,我觉得如果要导出很大批量的数据,可以导出 csv 文件,没有必要非得导出 Excel 文件,毕竟现在机器学习数据训练等很多都是用的 csv,而且 csv 的格式简单,更方便导出,导出性能会Excel更好更高效。
不过有些场景可能必须要用 Excel,所以想了一下还是加一下这个功能吧,目前只支持 List 或 DataTable 直接导出 Excel
使用示例
使用起来比较简单,和之前的使用并没有什么不同,可以参考下面的单元测试:
List 自动分 Sheet 导出:
[Theory]
[InlineData(ExcelFormat.Xls, 1000, 1)]
[InlineData(ExcelFormat.Xls, 65536, 2)]
[InlineData(ExcelFormat.Xls, 132_000, 3)]
//[InlineData(ExcelFormat.Xls, 1_000_000, 16)]
//[InlineData(ExcelFormat.Xlsx, 1_048_576, 2)]
public void EntityListAutoSplitSheetsTest(ExcelFormat excelFormat, int rowsCount, int expectedSheetCount)
{
var list = Enumerable.Range(1, rowsCount)
.Select(x => new Notice()
{
Id = x,
Content = $"content_{x}",
Title = $"title_{x}",
Publisher = $"publisher_{x}"
})
.ToArray();
var bytes = list.ToExcelBytes(excelFormat);
var workbook = ExcelHelper.LoadExcel(bytes, excelFormat);
Assert.Equal(expectedSheetCount, workbook.NumberOfSheets);
}
DataTable 自动分 Sheet 导出:
[Theory]
[InlineData(ExcelFormat.Xls, 1000, 1)]
[InlineData(ExcelFormat.Xls, 65536, 2)]
[InlineData(ExcelFormat.Xls, 132_000, 3)]
//[InlineData(ExcelFormat.Xls, 1_000_000, 16)]
//[InlineData(ExcelFormat.Xlsx, 1_048_576, 2)]
public void DataTableAutoSplitSheetsTest(ExcelFormat excelFormat, int rowsCount, int expectedSheetCount)
{
var dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("Id", typeof(int)));
for (var i = 0; i < rowsCount; i++)
{
var row = dataTable.NewRow();
row.ItemArray = new object[]
{
i+1
};
dataTable.Rows.Add(row);
}
Assert.Equal(rowsCount, dataTable.Rows.Count);
var bytes = dataTable.ToExcelBytes(excelFormat);
var workbook = ExcelHelper.LoadExcel(bytes, excelFormat);
Assert.Equal(expectedSheetCount, workbook.NumberOfSheets);
}
More
除了上面的示例,还提供了两个扩展方法 GetWorkbookWithAutoSplitSheet<TEntity>(this IList<TEntity> entityList, ExcelFormat excelFormat)/GetWorkbookWithAutoSplitSheet(this DataTable dataTable, ExcelFormat excelFormat, ExcelSetting excelSetting = null) 来获取自动分 Sheet 之后的 IWorkbook,进行进一步的自定义操作。
其他的操作方式和之前完全一样,可以直接导出文件,字节数组,或者写入到指定 Stream 里
void ToExcelFile<TEntity>(this IList<TEntity> entityList, string excelPath);
byte[] ToExcelBytes<TEntity>(this IList<TEntity> entityList, ExcelFormat excelFormat = ExcelFormat.Xls);
void ToExcelStream<TEntity>(this IList<TEntity> entityList, Stream stream, ExcelFormat excelFormat = ExcelFormat.Xls);
详细变更可以参考 PR: https://github.com/WeihanLi/WeihanLi.Npoi/pull/96/files
Reference
- https://github.com/WeihanLi/WeihanLi.Npoi/issues/94
- https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/test/WeihanLi.Npoi.Test/ExcelTest.cs#L625
- https://github.com/WeihanLi/WeihanLi.Npoi/pull/96
- https://weihanli.github.io/WeihanLi.Npoi/docs/api/WeihanLi.Npoi.NpoiExtensions.html
WeihanLi.Npoi 1.13.0 更新日志的更多相关文章
- WeihanLi.Npoi 1.10.0 更新日志
WeihanLi.Npoi 1.10.0 更新日志 Intro 上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的,周末找时间做了一下这个 feat ...
- WeihanLi.Npoi 1.7.0 更新
WeihanLi.Npoi 1.7.0 更新介绍 Intro 昨天晚上发布了 WeihanLi.Npoi 1.7.0 版本,增加了 ColumnInputFormatter/ColumnOutputF ...
- WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
WeihanLi.Npoi 1.11.0/1.12.0 Release Notes Intro 最近 NPOI 扩展新更新了两个版本,感谢 shaka chow 的帮忙和支持,这两个 Feature ...
- WeihanLi.Npoi 1.14.0 Release Notes
WeihanLi.Npoi 1.14.0 Release Notes Intro 周末更新了一下项目,开始使用可空引用类型,并且移除了 net45 的支持,仅支持 netstandard2.0 Cha ...
- WeihanLi.Npoi 1.16.0 Release Notes
WeihanLi.Npoi 1.16.0 Release Notes Intro 最近有网友咨询如何设置单元格样式,在之前的版本中是不支持的,之前主要考虑的是数据,对于导出的样式并没有支持,这个 is ...
- Docker 1.13.0 详细更新日志
本文讲的是Docker 1.13.0 详细更新日志[编者的话]Docker发布1.13.0版本,此次版本更新内容较多,以下为该版本具体的变更. 构建 添加在构建时可以指定镜像用作高速缓存源的功能. 这 ...
- Kali Liunx 2.0震撼来袭(附下载地址、新特性和更新日志)
Kali 2.0昨天已经在BlackHat 2015 USA上正式发布了.无论是粉丝们还是Kali官方都对这个2.0版本抱有极大的期待和热情.这是第一个基于Debian Jessie的Kali版本,此 ...
- WeihanLi.Npoi 近期更新
WeihanLi.Npoi 近期更新 Intro 最近对我的 NPOI 扩展做了一些改变,一方面提高性能,一方面修复bug,增加一些新的功能来让它更加好用,前几天发布了 1.5.0 版本,下面来介绍一 ...
- Easy Sysprep更新日志-skyfree大神
Easy Sysprep更新日志: Skyfree 发表于 2016-1-22 13:55:55 https://www.itsk.com/forum.php?mod=viewthread&t ...
随机推荐
- 【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost
问题情形 当在执行Redis一直指令时,有可能会遇见如下几种错误: 1) redis.clients.jedis.exceptions.JedisConnectionException: Could ...
- 性能测试之JVM的故障排查-堆内存泄漏
JVM异常说明(超链接) 一文中已介绍了,JVM每个运行时区域--程序计数器 .Java虚拟机栈.本地方法栈.Java堆.方法区.直接内存发生OutOfMemoryError的不同原因和不同错误信息. ...
- Vue 路由模块入门
前端路由 路由是根据不同的 url 展示不同的内容或页面: 前端路由是客户端浏览器可以不依赖服务端,不需要重新请求,可根据不同的URL渲染不同的视图页面 单页面的路由方式有两种: 哈希模式(利用has ...
- ubuntu18.04下的off-by-null:hitcon_2018_children_tcache
又没做出来,先说说自己的思路 因为是off-by-null,所以准备构造重叠的chunk,但是发现程序里有memset,给构造prev size造成重大问题 所以来详细记录一下做题过程 先逆向,IDA ...
- zk配置文件详解
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳数 Zoo ...
- 使用 k8s 搭建 confluence 6.10.x 版本
将公司中已有的 confluence 服务迁移到 k8s 集群中,需要保留当前已有的数据.整体需要分为如下几个步骤: 备份 mysql 数据 备份 confluence 安装目录 备份 conflue ...
- JAVA概述-JAVA入门基础
一.JAVA的历史 Java是1995年由Sun公司(现Oracle公司)推出的一门面向对象的高级编程语言.这门编程语言的Logo就像是一杯刚刚煮好的咖啡. Java最初期的开发是在1991年,最初的 ...
- Pytest框架中,conftest.py文件的作用?
conftest.py文件,它主要是实现fixture共享的. 第一,conftest.py文件当中,它储存的都是fixture,就是给用例提供做前置准备工作和后置清理工作的一个东西: 第二,conf ...
- 如何在Debian上安装和使用PHP Composer
1.条件 shell使用sudo权限访问正在运行的debian系统. 必须安装和配置5.3或更高版本的PHP. 2.在Debian上安装Composer 可以通过运行以下命令从getcomposer. ...
- 2. DRF 认证、权限、限流、分页、过滤、序列 化
2.1 user/urls.py ModelViewSet注册路由三部曲 from django.urls import include, path from user import views ...