easyExcel实现单sheet多子表,并结合动态表头,复杂表头

  • 一、实现目标
  • 二、官方文档阅读
    • 1.动态表头
    • 2.单页面多子表
    • 3.复杂表头
  • 三、开始编码
    • 测试主类
    • 数据类LIst获取
    • 表头list

一、实现目标

要实现单sheet页面多个不定表头的子表,并且列的值也不同,并且需要有多级表头

二、官方文档阅读

1.动态表头

    /*** 动态头,实时生成头写入* <p>* 思路是这样子的,先创建List<String>头格式的sheet仅仅写入头,然后通过table 不写入头的方式 去写入数据** <p>* 1. 创建excel对应的实体对象 参照{@link DemoData}* <p>* 2. 然后写入table即可*/@Testpublic void dynamicHeadWrite() {String fileName = TestFileUtil.getPath() + "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx";EasyExcel.write(fileName)// 这里放入动态头.head(head()).sheet("模板")// 当然这里数据也可以用 List<List<String>> 去传入.doWrite(data());}private List<List<String>> head() {List<List<String>> list = new ArrayList<List<String>>();List<String> head0 = new ArrayList<String>();head0.add("字符串" + System.currentTimeMillis());List<String> head1 = new ArrayList<String>();head1.add("数字" + System.currentTimeMillis());List<String> head2 = new ArrayList<String>();head2.add("日期" + System.currentTimeMillis());list.add(head0);list.add(head1);list.add(head2);return list;}

2.单页面多子表

使用table去写入

    /*** 使用table去写入* <p>* 1. 创建excel对应的实体对象 参照{@link DemoData}* <p>* 2. 然后写入table即可*/@Testpublic void tableWrite() {String fileName = TestFileUtil.getPath() + "tableWrite" + System.currentTimeMillis() + ".xlsx";// 方法1 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案// 这里 需要指定写用哪个class去写try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build();// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build();WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build();// 第一次写入会创建头excelWriter.write(data(), writeSheet, writeTable0);// 第二次写如也会创建头,然后在第一次的后面写入数据excelWriter.write(data(), writeSheet, writeTable1);}

3.复杂表头

private List<List<String>> head() {List<List<String>> list = new ArrayList<List<String>>();List<String> head0 = new ArrayList<String>();//表头是两层数组,第一层是列,第二层是每列有两个表头,其中第一个是第一级表头head0.add("裁剪单01");head0.add("字符串");List<String> head1 = new ArrayList<String>();head1.add("裁剪单01");head1.add("数字");List<String> head2 = new ArrayList<String>();head2.add("裁剪单01");head2.add("日期");list.add(head0);list.add(head1);list.add(head2);return list;
}
    /*** 复杂头写入* <p>1. 创建excel对应的实体对象 参照{@link ComplexHeadData}* <p>2. 使用{@link ExcelProperty}注解指定复杂的头* <p>3. 直接写即可*/@Testpublic void complexHeadWrite() {String fileName = TestFileUtil.getPath() + "complexHeadWrite" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭EasyExcel.write(fileName, ComplexHeadData.class).head(head()).sheet("模板").doWrite(data());}

三、开始编码

测试主类

    @Testpublic void test(){//设置请求信息(获取HttpServletResponse,可通过HttpServletResponse给导出数据命名)String fileName = "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx";ExcelWriter excelWriter =  EasyExcel.write(fileName).build();WriteSheet sheet = EasyExcel.writerSheet(0, "报表数据").build();//sheet不要设置表头,在table中设置表头
//        sheet.setHead(head());// 创建两个表格,指定需要头WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build();//设置表一表头writeTable0.setHead(head());WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build();//设置表二表头这里设置是一样的writeTable1.setHead(head());// 将多表写到同一个sheet,和excelexcelWriter.write(data(), sheet, writeTable0);excelWriter.write(data(), sheet, writeTable1);//完成excelWriter.finish();System.out.println("报表导出成功!");}

数据类LIst获取

private List<List<String>> data() {List<List<String>> list = new ArrayList<>();for (int i = 0; i < 10; i++) {List<String> data = new ArrayList<>();data.add("1");data.add("1");data.add("1");list.add(data);}return list;
}

表头list

private List<List<String>> head() {List<List<String>> list = new ArrayList<List<String>>();List<String> head0 = new ArrayList<String>();//表头是两层数组,第一层是列,第二层是每列有两个表头,其中第一个是第一级表头head0.add("裁剪单01");head0.add("字符串");List<String> head1 = new ArrayList<String>();head1.add("裁剪单01");head1.add("数字");List<String> head2 = new ArrayList<String>();head2.add("裁剪单01");head2.add("日期");list.add(head0);list.add(head1);list.add(head2);return list;
}

easyExcel实现单sheet多子表,并结合动态表头,复杂表头相关推荐

  1. 后台excel导出(单sheet 多sheet)

    //单sheet调用模板public void exportInfo(String ids,HttpServletResponse response) { try {//单元格列头String[] r ...

  2. C#实战021:OleDb操作-新增Excel中的sheet工作表

    获取到lExcel中的sheet中的所有工作表,我们就可以来创建新的sheet工作表了,首先我们判断下Excel中的sheet中的所有工作表中是否存在我们需要创建的sheet工作表,如果没有的话我们在 ...

  3. easyPoi单sheet与多sheet导出excel简单实用(重点:自动列宽的设置)

    导入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base< ...

  4. 电子表单系列谈之表单数据处理

    袁永福( http://www.xdesigner.cn ) 2007-8-16 点击下载其表单工具概念版本 一般的电子表单工具都要求能自动显示和保存关系型数据库中的数据,比如可以使用SQL语句查询数 ...

  5. ajax合并表单,ajax。表单

    JQuery读书笔记--JQuery-Form中的ajaxForm和ajaxSubmit的区别 JQuery中的ajaxForm和ajaxSubmit使用差不多功能也差不多.很容易误解. 按照作者的解 ...

  6. BootStrap 智能表单系列 五 表单依赖插件处理

    这一章比较简单哦,主要就是生产表单元素后的一些后续处理操作,比如日期插件的渲染.一些autocomplete的处理等,在回调里面处理就可以了, demo: $("input.date-pic ...

  7. html提交表单原理,HTML表单、HTTP Get与Post杂谈

    HTTP的GET/POST方式有何区别?这是一个老生常谈的问题,但老生常谈的问题往往有一些让人误解的结论.本文将带您浅尝HTTP协议,在了解HTTP协议的同时将会展示许多被人们忽视的内容.在掌握了HT ...

  8. 重置表单验证 清除表单校验信息

    重置表单验证 清除表单校验信息 提交表单验证的时间经常遇见的一个问题 再次打开时表单验证依旧存在,这种就很烦,用户体验有点差, 在使用Vant或Element UI框架时经常会遇到,再次打开表单时,原 ...

  9. Excel导出多sheet单sheet通用型(poi)

    导出背景: 1.Activity 活动 → Coupon 优惠券    1: N 2.List<Activity>.List<ActivityDto> List<Coup ...

最新文章

  1. ng-repeat 设定select 选择项
  2. 打造数字化服务能力,中国联通如何借助云原生技术实现增长突围?
  3. 【NYOJ-35】表达式求值——简单栈练习
  4. Sublime Text 3 插件安装
  5. TinyUI组件开发示例
  6. openSUSE 13.1 Milestone 2 发布
  7. AD 组策略应用与排错(2排错)
  8. python数学实验与建模_Python数学
  9. springmvc03 接收请求参数
  10. vue项目运用繁体字
  11. 树莓派引脚介绍与GPIO的初步认识与应用
  12. If 表达式和条件语句
  13. 操盘手怎样于2019年4月17号的二级市场中基于ATR实现开仓平仓
  14. 643 · 最长绝对文件路径
  15. 恒温烙铁使用注意事项
  16. 将yolov5中的PANet层改为BiFPN
  17. 评价类模型——层次分析法
  18. oracle查询表数据写入时间,求大神解决关于查询Oracle表数据时间
  19. Ionic 学习笔记之-痛彻心扉的环境搭建
  20. iOS开发——加载、滑动翻阅大量图片解决方案详解 .

热门文章

  1. ROTATED REGION BASED CNN FOR SHIP DETECTION 基于旋转区域的CNN舰船检测
  2. Opencv中BGR、YUV、YUV_I420\NV12分析
  3. Vue3+Quasar实现ins风格图片墙
  4. SpringBoot中如何使用单元测试
  5. 单行、多行 注释.HTML
  6. STVP ST Visual Programmer 下载程序出错
  7. 趋势面法优缺点_趋势面分析法
  8. 华盛顿大学计算机语言学,华盛顿大学人工智能专业排名2020年
  9. 亚马逊html邮件,创建电子邮件模板 - Amazon Pinpoint
  10. Linux 磁盘管理-配额管理-配置用户对磁盘进行指定大小或者文件数量的使用权限