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 ...
随机推荐
- beego增删改查
package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go ...
- faker使用
laravel中faker的方法总结 展开 laravel faker用法总结 安装 composer require fzaninotto/faker 一.基础方法: 随机数:randomD ...
- 《Kafka笔记》2、环境搭建、Topic管理
目录 一.Kafka环境搭建和Topic管理 1 单机环境搭建 1.1 环境准备 1.1.1 JDK 安装 1.1.2 配置主机名和ip 1.1.3 关闭防火墙和防火墙开机自启动 1.1.4 zook ...
- Java接口的初始化
背景 接口与类真正有所区别的是前面讲述的四种"有且仅有"需要开始初始化场景中的第三种:当一个类在初始化时,要求其父类全部都已经初始化过了,但是一个接口在初始化时,并不要求其父接口全 ...
- 对PatchGAN的感知域(receptive_field)理解
for basic discriminator of GANs 判别器用于感知生成器产生的合成图片和ground-truth的差异,并旨在实现区分出fake or real: 同时,判别器的输出也是经 ...
- 蒲公英 · JELLY技术周刊 Vol 27: 平平无奇 React 17
蒲公英 · JELLY技术周刊 Vol.27 这个热闹的十月终于要走到尾声,React 17 历经 4 个 RC 版本之后,也于数天前正式发布了,而同在几天前发布的 CRA 4.0 也已经完成了 Re ...
- Alibaba Spring Cloud 微服务介绍(一)
" Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件 ...
- 关于LoRa安全联盟的六大常见问题
LoRaWAN的安全机制在哪里指定? 所有安全机制都在LULA联盟规范中指定,可以由公众下载. LoRa联盟规范如何保证LoRaWAN网络的安全操作? LoRaWAN支持来源认证.完整的媒体访问控制( ...
- Java学习的第十七天
1.静态变量 静态方法 静态代码块 2.今天没问题 3.明天学习abstract和综合实例
- python模块导入(包)
模块 关注公众号"轻松学编程"了解更多. 1.1. 模块的概述 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里的代码就会越来越长,越来越不容易维护. 为了编写可维 ...