WeihanLi.Npoi 根据模板导出Excel

Intro

原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据模板导出,在 1.8.0 版本中引入了根据模板导出的功能

使用示例

示例模板

模板规划的可以有三种数据:

  • Global:一个是导出的时候可以指定一些参数,作为 Global 参数,默认参数格式使用: $(Global:PropName) 的格式

  • Header:配置的对应属性的显示名称,默认是属性名称,默认参数格式: $(Header:PropName)

  • Data:对应数据的属性值,默认参数格式: $(Data:PropName)

默认模板参数格式(从 1.8.2 版本开始支持通过 TemplateHelper.ConfigureTemplateOptions 方法来自定义):

  • Global 参数: $(Global:{0})

  • Header 参数: $(Header:{0})

  • Data 参数: $(Data:{0})

  • Data Begin: <Data>

  • Data End: </Data>

模板规范:

模板需要通过 Data Begin 和 Data End 来配置数据模板的开始和结束以识别每一个数据对应的开始行和结束行

示例代码

示例配置

var setting = ExcelHelper.SettingFor<TestEntity>();
// ExcelSetting
setting.HasAuthor("WeihanLi").HasTitle("WeihanLi.Npoi test").HasDescription("WeihanLi.Npoi test").HasSubject("WeihanLi.Npoi test");
setting.HasSheetConfiguration(0, "SystemSettingsList", 1, true);
setting.Property(_ => _.SettingId).HasColumnIndex(0);
setting.Property(_ => _.SettingName).HasColumnTitle("SettingName").HasColumnIndex(1);
setting.Property(_ => _.DisplayName).HasOutputFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}").HasInputFormatter((entity, originVal) => originVal.Split(new[] { '_' })[2]).HasColumnTitle("DisplayName").HasColumnIndex(2);
setting.Property(_ => _.SettingValue).HasColumnTitle("SettingValue").HasColumnIndex(3);
setting.Property(x => x.Enabled).HasColumnInputFormatter(val => "启用".Equals(val)).HasColumnOutputFormatter(v => v ? "启用" : "禁用");
setting.Property("HiddenProp").HasOutputFormatter((entity, val) => $"HiddenProp_{entity.PKID}");
setting.Property(_ => _.PKID).Ignored();
setting.Property(_ => _.UpdatedBy).Ignored();
setting.Property(_ => _.UpdatedTime).Ignored();

根据模板导出示例代码:

var entities = new List<TestEntity>()
{new TestEntity(){PKID = 1,SettingId = Guid.NewGuid(),SettingName = "Setting1",SettingValue = "Value1",DisplayName = "ddd1"},new TestEntity(){PKID=2,SettingId = Guid.NewGuid(),SettingName = "Setting2",SettingValue = "Value2",Enabled = true},
};
entities.ToExcelFileByTemplate(Path.Combine(ApplicationHelper.AppRoot, "Templates", "testTemplate.xlsx"),ApplicationHelper.MapPath("templateTestEntities.xlsx"),extraData: new{Author = "WeihanLi",Title = "导出结果"}
);

导出结果

More

为了方便使用,增加了一些方便的扩展方法:

public static int ToExcelFileByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, string templatePath, string excelPath, int sheetIndex = 0, object extraData = null);
public static int ToExcelFileByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, byte[] templateBytes, string excelPath, ExcelFormat excelFormat = ExcelFormat.Xls, int sheetIndex = 0, object extraData = null);
public static int ToExcelFileByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, IWorkbook templateWorkbook, string excelPath, int sheetIndex = 0, object extraData = null);
public static byte[] ToExcelBytesByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, string templatePath, int sheetIndex = 0, object extraData = null);
public static byte[] ToExcelBytesByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, byte[] templateBytes, ExcelFormat excelFormat = ExcelFormat.Xls, int sheetIndex = 0, object extraData = null);
public static byte[] ToExcelBytesByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, Stream templateStream, ExcelFormat excelFormat = ExcelFormat.Xls, int sheetIndex = 0, object extraData = null);
public static byte[] ToExcelBytesByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, IWorkbook templateWorkbook, int sheetIndex = 0, object extraData = null);
public static byte[] ToExcelBytesByTemplate<TEntity>([NotNull]this IEnumerable<TEntity> entities, ISheet templateSheet, object extraData = null);

Reference

  • https://github.com/WeihanLi/WeihanLi.Npoi

  • https://github.com/WeihanLi/WeihanLi.Npoi/blob/917e8fb798e9cbae52d121a7d593e37639870911/samples/DotNetCoreSample/Program.cs#L94

​WeihanLi.Npoi 根据模板导出Excel相关推荐

  1. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  2. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  3. EasyExcel根据自定义模板导出Excel(包含图片、表格)

    使用EasyExcel根据模板导出excel,包含图片.表格 提示:其实使用EasyExcel根据模板导出一个excel并不难,难点在于指定图片的位置 文章目录 使用EasyExcel根据模板导出ex ...

  4. 使用EasyPoi利用excel模板导出excel表格下载

    前言:使用excel模板导出excel的好处在于可以事先在模板上定义颜色.格式等,适用于模板设计得比较灵活复杂的场景 一.添加jar包 <dependency><groupId> ...

  5. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解

    提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并 ...

  6. 阿里easyexcel通过模板导出excel

    easyexcel通过模板导出excel 之前使用其他方式进行excel的导出,像poi或者freemarker或者Beetl,效果都还行,但是总是有一些小问题.许多的解决思路都是:通过制作excel ...

  7. java使用模板导出Excel表格

    java使用模板导出Excel表格 文章目录 java使用模板导出Excel表格 模板示例 一.引入依赖 二.使用步骤 1.添加工具类 2.导出Excel 模板示例 一.引入依赖 <depend ...

  8. 使用EasyPoi根据模板导出Excel或word文档

    接着上篇文章 Java根据模板导出Excel并生成多个Sheet 简单介绍下EasyPoi的使用,直接上代码吧 首先当然是先引入jar包了,看下图 其次,还是贴代码吧看实例,下面是根据模板导出的工具类 ...

  9. java poi导出excel模板_POI通过模板导出EXCEL文件的实例

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

最新文章

  1. C/C++语言链表的排序与查找定位
  2. GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
  3. linux kernel中的栈的介绍
  4. mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file 原因调查
  5. OpenGL packetbuffer分组缓冲器的实例
  6. 常见的14种异常心电图的波形特点
  7. java checkbox数组_Java中的复选框数组
  8. Java Scala获取所有注解的类信息
  9. Java编程的逻辑 (34) - 随机
  10. docker centos rpm离线安装1.8.2及pull的正确姿势
  11. ADSL密码查看器.rar
  12. ANSYS网格转化为模型、ANSYS网格导入到workbench分析
  13. 小米手机测试代码电池测试代码
  14. SLA服务可用性4个9是什么意思?如何保证服务的高可用性 HA(High Availability)?...
  15. thinkpad e480安装win7
  16. 泰坦尼克号-数据加载及探索性数据分析
  17. 开发移动应用的7个致命错误
  18. wazuh-monitord agent连接监控
  19. MySQL数据库(数据库约束)
  20. The Cross-section of Expected stock returns 1992翻译

热门文章

  1. 60个高质量的CSS、XHTML网页布局模板下载
  2. 《那些年啊,那些事——一个程序员的奋斗史》——35
  3. SVN的VS.NET插件——AnkhSVN
  4. 鸿蒙系统用没有安卓的代码,套壳?不存在!纯鸿蒙系统不含任何安卓代码,其他手机厂商可使用...
  5. Teams App如何选择用户
  6. 如何离线安装chrome插件
  7. 2017-03-10Git版本回退
  8. 图片加载框架Picasso - 源码分析
  9. 数据结构笔记--栈的总结及java数组实现简单栈结构
  10. 依赖Zookeeper生成全局唯一序列号