.Net Core下基于NPOI对Excel、Word操作封装
本库进行了重写,如果需要请转移到下文查看:
https://www.cnblogs.com/holdengong/p/10889780.html
框架与依赖
- 框架:.NET Standard 2.0
- 依赖:DotNetCore.NPOI
Excel导入(ExcelImportService)

- 导出模板
- 校验数据
- 正则表达式校验
- 性别
- 邮箱
- 身份证号
- 手机号
- 车牌号
- 非空
- 数据库存在校验
- 数值区间
- 字符串长度
- 日期
- 重复数据
- 正则表达式校验
- 数据转换
Demo
public class ImportCar
{
[ColName("车牌号")]
[Regex(RegexConstant.NOT_EMPTY_REGEX,ErrorMsg ="必填")]
[DatabaseExist("cartable","carcode")]
[Regex(RegexConstant.CAR_CODE_REGEX)]
[Duplication]
public string CarCode { get; set; }
[ColName("手机号")]
[Regex(RegexEnum.国内手机号)]
public string Mobile { get; set; }
[ColName("身份证号")]
[Regex(RegexConstant.IDENTITY_NUMBER_REGEX)]
public string IdentityNumber { get; set; }
[ColName("姓名")]
[MaxLength(10)]
public string Name { get; set; }
[ColName("性别")]
[Regex(RegexConstant.GENDER_REGEX)]
public GenderEnum Gender { get; set; }
[ColName("注册日期")]
[DateTime]
public DateTime RegisterDate { get; set; }
[ColName("年龄")]
[Range(0, 150)]
public int Age { get; set; }
}
//校验Excel数据
List<ExcelDataRow> rows = ExcelImportService.Import<ImportCar>(fileUrl, delegateNotExistInDatabase);
//错误信息入库
rows.Where(r => !r.IsValid).ToList().ForEach(
r =>
{
InsertErrorLog($"第{r.RowIndex}行,{r.ErrorMsg}");
}
);
//正确数据转换为指定类型
List<ImportCar> importCars = rows.Where(r => r.IsValid).FastConvert<ImportCar>().ToList();
//正确数据入库
InsertCorrectData(importCars);
Excel导出(ExcelExportService)

- 导出Excel
- 标记样式
- 表头(字体、加粗、字号、颜色)
- 列合并单元格
- 自适应宽高
- 自动换行
Demo
[WrapText]
[Header(Color =ColorEnum.RED,FontName ="微软雅黑",FontSize =12,IsBold =true)]
public class ExportCar
{
[MergeCols]
[ColName("车牌号")]
public string CarCode { get; set; }
[ColName("姓名")]
public string Name { get; set; }
[ColName("性别")]
public GenderEnum Gender { get; set; }
[ColName("注册日期")]
public DateTime RegisterDate { get; set; }
[ColName("年龄")]
public int Age { get; set; }
}
List<ExportCar> list;
//业务操作,为list 赋值...
...
//导出
IWorkbook wk = ExcelExportService.Export(list);
//为IWorkbook提供了转换为byte数组的扩展方法
File.WriteAllBytes(@"c:\test\test.xls", wk.ToBytes());
导出效果

Word生成(WordExportService)

- 根据模板生成Word
- 插入文本
- 插入图片
Demo
制作Word模板

定义类
public class WordCar
{
[PlaceHolder(PlaceHolderEnum.A)]
public string OwnerName { get; set; }
[PlaceHolder(PlaceHolderEnum.B)]
public string CarType { get; set; }
//图片占位的属性类型必须为List<string>,存放图片的绝对全地址
[PicturePlaceHolder(PlaceHolderEnum.C,"车辆照片")]
public List<string> CarPictures { get; set; }
[PicturePlaceHolder(PlaceHolderEnum.D,"车辆证件")]
public List<string> CarLicense { get; set; }
}
导出
string curDir = Environment.CurrentDirectory;
string pic1 = Path.Combine(curDir, "files", "1.jpg");
string pic2 = Path.Combine(curDir, "files", "2.jpg");
string pic3 = Path.Combine(curDir, "files", "3.jpg");
string templateurl = Path.Combine(curDir, "files", "CarWord.docx");
WordCar car = new WordCar()
{
OwnerName = "张三丰",
CarType = "豪华型宾利",
CarPictures = new List<string> { pic1, pic2 },
CarLicense = new List<string> { pic3 }
};
XWPFDocument doc = WordExportService.ExportFromTemplate(templateurl, car);
///为XWPFDocument提供了转换为byte数组的扩展方法
File.WriteAllBytes(@"c:\test\test.docx", doc.ToBytes());
导出效果

性能测试
Excel导入
- 5000条数据读取和校验(首次缓存之后,700毫秒左右,校验使用了缓存提高性能)
- 4992条有效数据的转换(80毫秒,数据转换使用了表达式树生成委托,达到了接近硬编码的性能)

github地址:
https://github.com/holdengong/Ade.OfficeService
.Net Core下基于NPOI对Excel、Word操作封装的更多相关文章
- NPOI - .NET Excel & Word操作组件
概要 NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. NPOI是构建在POI 3.x版本之上的,它可以在没有安装Offi ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- NPOI对Excel的操作(Sheet转DataTable、List<T>)
通过NPOI对Excel进行操作,这里主要是读取的操作.封装到ExcelHelper操作类中. 1 using System.Collections.Generic; 2 using NPOI.HSS ...
- .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录
#region 从Excel导入 //用法 //var cellHeader = new Dictionary<string, string>(); //cellHeader.Add(&q ...
- 基于NPOI对Excel进行简单的操作
1. 关于NPOI NPOI是一个开源的用于在C#程序中读写Excel.WORD等微软OLE2组件文档的项目,使用NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. 2 ...
- 七、.net core下配置、数据库访问等操作实现
配置读取 .net core下读取配置还是有点麻烦的,本身没有System.Configuration.dll,所以在进行配置前需要自行引用Microsoft.Extensions.Configura ...
- C#NPOI对Excel的操作、导入导出时异常处理、最全的NPOI资料在这里~
一.Excel理论知识 最新版NPOI2.4.1链接:https://pan.baidu.com/s/1iTgJi2hGsRQHyw2S_4dIUw 提取码:adnq • 整个Excel表格叫做工作 ...
- 基于NPOI导出Excel
在上一篇文章[关于大数据的查询与导出]中,提到了使用NPOI组件导出Excel,本想上次一起分享给大家,无奈最近比较忙,今天抽空整理了下,分享出来. 预置填充模板,并且需要支持公式计算; 可导入图片; ...
- 分享:一个基于NPOI的excel导入导出组件(强类型)
一.引子 新进公司被安排处理系统的数据报表任务——对学生的考试成绩进行统计并能导出到excel.虽然以前也有弄过,但感觉不是很好,所以这次狠下心,多花点时间作个让自己满意的插件. 二.适用领域 因为需 ...
随机推荐
- 微信无法跳转appstore总结--应用宝微下载申请
以前是有方法,可以实现微信下跳转appstore的. 大概就是把url改为:http://mp.weixin.qq.com/mp/redirect?url="跳转url"(可编码也 ...
- Operating System-进程间互斥的问题-生产者&&消费者引入
之前介绍的几种解决进程间互斥的方案,不管是Peterson方案还是TSL指令的方式,都有一个特点:当一个进程被Block到临界区外面时,被Block的进程会一直处于忙等待的状态,这个不但浪费了CPU资 ...
- hive JDBC异常到多租户
hive jdbc执行select count(*) from test报错. return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedT ...
- 通过php的MongoDB driver连接Azure的DocumentDB PaaS
Azure的DocumentDB是NoSQL类型的数据库.它还可以和目前流行的mongodb兼容,采用mongodb的driver可以直接连接Azure的DucumentDB. 目前在国内的Azure ...
- 线程安全(1)--demo1
成员变量的类用于多线程时是不安全的,不安全体现在这个成员变量可能发生非原子性的操作,而变量定义在方法内也就是局部变量是线程安全的.想想在使用struts1时,不推荐创建成员变量,因为action是单例 ...
- redmine2.3环境搭建
1. 安装redmine bitnami-redmine-2.3.0-0-windows-installer.exe安装到C:\BitNami\redmine-2.3.0-0目录下. 其中redmin ...
- Python代码规范总结
1.缩进问题: Tip:用4个空格来缩进代码 不要用Tab键或者是Tab和空格混用, vim用户可以将tab键设置为4个空格的长度.要么选择垂直对齐换行的元素, 或者是使用4空格悬挂式缩进(第一行没有 ...
- C语言学习笔记--#和##操作符
1. #运算符 (1)#运算符用于在预处理期将宏的参数转换为字符串 (2)#的转换作用是在预处理期完成的,因此只在宏定义中有效,即其他地方不能用#运算符 (3)用法:#define STRING(x) ...
- 图片缓存核心类LruCache
该类类似一个缓存池,具体可参考 http://www.fengfly.com/plus/view-214546-2.html
- eclipse格式化代码模板
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <profi ...