首先引入依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version>
</dependency>

创建实体类

@Data
@ContentRowHeight(25) //文本行高度
@HeadRowHeight(30)    //标题高度
@ColumnWidth(25)      //默认列宽度
public class JdkhDto {@ExcelProperty({"1", "序号"})private int seriaNumber;@ExcelProperty({"1", "处室"})@ColumnWidth(40)private String cs;@ExcelProperty({"1", "人员"})private String person;@ExcelProperty({"1", "考核结果"})private String rq;
}

这样的话可以有两个表头

因为要对第一行进行动态转换,所以特意留了一行(其实动态的在这里写没有用,要代码实现)

为了方便,没有写三层架构

第一列序号自增,其实很简单,实体类第一个加序号字段,从后端取出来之后放到集合里的同时,自增放进去,实现:

public List<JdkhDto> download(String entrycode) {List<JdkhDto> jdkhDtoList = new ArrayList<>();List<UserIdDto> attribute = jdkhDownloadMapper.getAttribute(entrycode);List<String> personId = new ArrayList<>();for (UserIdDto userId : attribute) {List<String> lists = Arrays.asList(userId.getAttribute1().split(","));personId.add(userId.getFullname().substring(0, 10));for (String list : lists) {personId.add(list);}}//前面代码不用看,从这里开始看,定义一个开始变量 i = 1Integer i = 1;for (String bid : personId) {String score = "";score = jdkhDownloadMapper.getScore(entrycode, bid);if ("1".equals(score)) {score = "好";} else if ("2".equals(score)) {score = "较好";} else if ("3".equals(score)) {score = "一般";} else if ("4".equals(score)) {score = "较差";} else if ("0".equals(score)) {score = "不定等次";}String personName = jdkhDownloadMapper.getPersonName(bid);String organName = jdkhDownloadMapper.getOrganname(entrycode, bid);if ("1".equals(organName) || "".equals(organName) || null == organName) {organName = jdkhDownloadMapper.getNewOrganname(entrycode, bid);}JdkhDto jdkhDto = new JdkhDto();jdkhDto.setRq(score);jdkhDto.setCs(organName);jdkhDto.setPerson(personName);//在这里把i给加到对象里面jdkhDto.setSeriaNumber(i);jdkhDtoList.add(jdkhDto);//每循环一次i自增i++;}JdkhDto jdkhDto = new JdkhDto();//最后一行要靠右,不想单独设置就加了很多空格让“签字”靠右jdkhDto.setSeriaNumber("                                                                            签字 :");jdkhDtoList.add(jdkhDto);return jdkhDtoList;}

写进excel操作:

@RestController
@RequestMapping("/download")
public class JdkhDownloadController {@Autowiredprivate JdkhDownloadService jdkhDownloadService;@GetMapping("/all")public HttpResult download(@RequestParam("year") String year, @RequestParam("quarter") String quarter) {String entrycode = year + "Q" + quarter;//D盘下的myexcel目录下String fileName = "D:/myexcel/" + "省自然资源厅" + year + "第" + quarter + "季度考核结果" + ".xlsx";List<List<String>> list = new ArrayList<>();//内容样式策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();//垂直居中,水平居中contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);contentWriteCellStyle.setBorderTop(BorderStyle.THIN);contentWriteCellStyle.setBorderRight(BorderStyle.THIN);contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);// 字体策略WriteFont contentWriteFont = new WriteFont();// 字体大小contentWriteFont.setFontHeightInPoints((short) 12);contentWriteCellStyle.setWriteFont(contentWriteFont);//头策略使用默认 设置字体大小WriteCellStyle headWriteCellStyle = new WriteCellStyle();WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short) 12);headWriteCellStyle.setWriteFont(headWriteFont);//这里实现动态头,和注解加两个表头一个原理List<String> headList = new ArrayList<>();headList.add("序号");headList.add("处室");headList.add("人员");headList.add("考核结果");headList.forEach(i -> {List<String> head = new ArrayList<>();head.add("省自然资源厅" + year + "第" + quarter + "季度考核结果");head.add(i);list.add(head);});List<JdkhDto> download = jdkhDownloadService.download(entrycode);if (download.size() == 1) {return HttpResult.error("选择的日期暂时没有考核结果");}
//        LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(3, 4,0);OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy = new OnceAbsoluteMergeStrategy(download.size() + 1, download.size() + 1, 0, 3);// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为季度考核表 然后文件流会自动关闭EasyExcel.write(fileName, JdkhDto.class).head(list).registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle)).registerWriteHandler(onceAbsoluteMergeStrategy).sheet(quarter + "季度考核表").doWrite(download);return HttpResult.ok();}
}

最后效果:

easyExcel的一些操作相关推荐

  1. EasyExcel实现读操作

    实现EasyExcel对Excel读操作 创建实体类 import com.alibaba.excel.annotation.ExcelProperty; public class ReadData ...

  2. EasyExcel实现写操作

    pom中引入xml相关依赖 <dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel - ...

  3. poi和easyExcel基于Java操作Excel学习笔记

    1 学习前言 Excel和读写和文件的读写没有本质的区别,都是属于IO操作,我们使用原生的IO就能解决Excel的导入和导出,当然操作起来比较麻烦,性能也不高,这次我们就学习poi和easyExcel ...

  4. 【EasyExcel】Excel操作(九):Excel读取写入一条龙

    如果你想和别人制造牵绊,就要承受流泪的风险. 我是目录 简单介绍 快速上手 所需依赖 所需实体类 基本的写 基本的读 web端的写入 简单介绍 在之前的excel系列博客 [点击进入] 中给大家带来了 ...

  5. 【easyexcel】入门操作

    easyexcel工具类,github地址:​​​​​​https://github.com/alibaba/easyexcel 引入依赖 <dependency><groupId& ...

  6. easyexcel 设置标题_Alibaba easyExcel对Excel操作之复杂标题处理

    easyExcle对poi进行二次封装优化,对外提供了更加方便的接入方式,如果对导出Excle的标题有比较复杂的业务需求,那么就要用到官方提供的2中方式(模版填充.自定义标题),如果自定义标题也不能满 ...

  7. 【EasyExcel】后台开发如何利用EasyExcel优雅的操作Excel

    文章目录 引言 优雅的读取Excel 优雅的写入Excel 优雅的小结 点点关注,不会迷路 引言 EasyExcel是当前性能最佳的Excel导出工具,本篇少侠将带领大家一起在后台开发中优雅的使用Ea ...

  8. Alibaba easyExcel对Excel操作之复杂标题处理

    easyExcle对poi进行二次封装优化,对外提供了更加方便的接入方式,如果对导出Excle的标题有比较复杂的业务需求,那么就要用到官方提供的2种方式(模版填充.自定义标题),如果自定义标题也不能满 ...

  9. EasyExcel的简单读取操作

    EasyExcel的简单读取操作 Java领域解析.生成Excel比较有名的框架有Apache poi. jxl等.但他们都存在一个严重的问题就是 非常的耗内存.如果你的系统并发量不大的话可能还行,但 ...

最新文章

  1. 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来
  2. 日记 [2008年01月21日]
  3. usb 转 uart cp210x 驱动解析
  4. 多协程实例讲解(python 三)
  5. windows server 2003双网卡的问题
  6. 大幅提高Android开发效率之TemplateBuilder
  7. 引进博士:130平米住房+20万经费+15万年薪;硕士24万引进费+可聘讲师
  8. 刨根究底字符编码之十——Unicode字符集的编码方式以及码点、码元
  9. 程序员soul 012期|妹子|重庆
  10. Python练习题1.变量类型练习 华氏温度转摄氏温度 圆面积周长计算 判断闰年
  11. 同时查询多个快递单号物流最简单实用的方法
  12. 无需越狱,iPhone修改应用通知气泡颜色
  13. arm中r12(IP)的用途
  14. 安全合规/ISO--2--ISO 27001介绍
  15. 通俗易懂浅谈一下服务器异地容灾备份
  16. Keras Regressor回归(一)
  17. 排班源码,排班软件源码,排班系统源码,java,php,asp,asp.net,c#,python通用
  18. 一键导入excel到数据库的最佳实践
  19. 大咖说:蜂窝车联网(C-V2X)技术发展、应用及展望
  20. Latex中文模板--适用于{人文课程}

热门文章

  1. Evernote international 剪藏
  2. SISD、MIMD、SIMD、MISD计算机的体系结构的Flynn分类法
  3. 提高生活、学习、工作效率的方法——时间管理Vs个人管理
  4. PROE产品设计:20个机械设计知识点
  5. 网络原理4 数据链路层
  6. Python编程:loguru管理日志输出
  7. 简单的爬取某租房网站租房信息并存入MySQL数据库
  8. bilibili外链链接到网页
  9. 工程项目提成标准方案_工程绩效提成奖金方案
  10. 整个世界都是你的绿幕:这个视频抠图换背景的方法太惊艳了!