本库进行了重写,如果需要请转移到下文查看:

https://www.cnblogs.com/holdengong/p/10889780.html

框架与依赖

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操作封装的更多相关文章

  1. NPOI - .NET Excel & Word操作组件

    概要 NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. NPOI是构建在POI 3.x版本之上的,它可以在没有安装Offi ...

  2. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  3. NPOI对Excel的操作(Sheet转DataTable、List<T>)

    通过NPOI对Excel进行操作,这里主要是读取的操作.封装到ExcelHelper操作类中. 1 using System.Collections.Generic; 2 using NPOI.HSS ...

  4. .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录

    #region 从Excel导入 //用法 //var cellHeader = new Dictionary<string, string>(); //cellHeader.Add(&q ...

  5. 基于NPOI对Excel进行简单的操作

    1. 关于NPOI NPOI是一个开源的用于在C#程序中读写Excel.WORD等微软OLE2组件文档的项目,使用NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. 2 ...

  6. 七、.net core下配置、数据库访问等操作实现

    配置读取 .net core下读取配置还是有点麻烦的,本身没有System.Configuration.dll,所以在进行配置前需要自行引用Microsoft.Extensions.Configura ...

  7. C#NPOI对Excel的操作、导入导出时异常处理、最全的NPOI资料在这里~

    一.Excel理论知识 最新版NPOI2.4.1链接:https://pan.baidu.com/s/1iTgJi2hGsRQHyw2S_4dIUw  提取码:adnq • 整个Excel表格叫做工作 ...

  8. 基于NPOI导出Excel

    在上一篇文章[关于大数据的查询与导出]中,提到了使用NPOI组件导出Excel,本想上次一起分享给大家,无奈最近比较忙,今天抽空整理了下,分享出来. 预置填充模板,并且需要支持公式计算; 可导入图片; ...

  9. 分享:一个基于NPOI的excel导入导出组件(强类型)

    一.引子 新进公司被安排处理系统的数据报表任务——对学生的考试成绩进行统计并能导出到excel.虽然以前也有弄过,但感觉不是很好,所以这次狠下心,多花点时间作个让自己满意的插件. 二.适用领域 因为需 ...

随机推荐

  1. (转)heX——基于 HTML5 和 Node.JS 开发桌面应用

    本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...

  2. 使用Fiddler进行iOS APP的HTTP/HTTPS抓包

    Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求.Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook. ...

  3. highcharts图表显示鼠标选择的Y轴提示线

    tooltip: { shared: true, crosshairs: [true, false] },

  4. Python函数(一)-return返回值

    定义一个函数可以在最后加上return返回值,方便查看函数是否运行完成和返回函数的值 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR&qu ...

  5. PDM后续处理-驼峰规则、清除约束、外键改名

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...

  6. ORACLE——日期时间格式化参数详解 之一

    2.日期格式化参数详解 2.1 -/,.;: 指定返回字串分隔符 SQL> select to_char(sysdate,'yyyy.mm.dd') from dual; TO_CHAR(SYS ...

  7. OSI七层网络模型与TCP/IP四层网络模型

    1.OSI网络7层模型 网络协议设计者不应当设计一个单一.巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议.这样做使得每个协议的设计.分 ...

  8. 1-3 分布式系统的瓶颈以及zk的相关特性

  9. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-004Table per class hierarchy(@Inheritance..SINGLE_TABLE)、@DiscriminatorColumn、@DiscriminatorValue、@DiscriminatorFormula)

    一.结构 You can map an entire class hierarchy to a single table. This table includes columns for all pr ...

  10. Entity Framework Tutorial Basics(32):Enum Support

    Enum in Entity Framework: You can now have an Enum in Entity Framework 5.0 onwards. EF 5 should targ ...