easyExcel的一些操作
首先引入依赖
<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的一些操作相关推荐
- EasyExcel实现读操作
实现EasyExcel对Excel读操作 创建实体类 import com.alibaba.excel.annotation.ExcelProperty; public class ReadData ...
- EasyExcel实现写操作
pom中引入xml相关依赖 <dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel - ...
- poi和easyExcel基于Java操作Excel学习笔记
1 学习前言 Excel和读写和文件的读写没有本质的区别,都是属于IO操作,我们使用原生的IO就能解决Excel的导入和导出,当然操作起来比较麻烦,性能也不高,这次我们就学习poi和easyExcel ...
- 【EasyExcel】Excel操作(九):Excel读取写入一条龙
如果你想和别人制造牵绊,就要承受流泪的风险. 我是目录 简单介绍 快速上手 所需依赖 所需实体类 基本的写 基本的读 web端的写入 简单介绍 在之前的excel系列博客 [点击进入] 中给大家带来了 ...
- 【easyexcel】入门操作
easyexcel工具类,github地址:https://github.com/alibaba/easyexcel 引入依赖 <dependency><groupId& ...
- easyexcel 设置标题_Alibaba easyExcel对Excel操作之复杂标题处理
easyExcle对poi进行二次封装优化,对外提供了更加方便的接入方式,如果对导出Excle的标题有比较复杂的业务需求,那么就要用到官方提供的2中方式(模版填充.自定义标题),如果自定义标题也不能满 ...
- 【EasyExcel】后台开发如何利用EasyExcel优雅的操作Excel
文章目录 引言 优雅的读取Excel 优雅的写入Excel 优雅的小结 点点关注,不会迷路 引言 EasyExcel是当前性能最佳的Excel导出工具,本篇少侠将带领大家一起在后台开发中优雅的使用Ea ...
- Alibaba easyExcel对Excel操作之复杂标题处理
easyExcle对poi进行二次封装优化,对外提供了更加方便的接入方式,如果对导出Excle的标题有比较复杂的业务需求,那么就要用到官方提供的2种方式(模版填充.自定义标题),如果自定义标题也不能满 ...
- EasyExcel的简单读取操作
EasyExcel的简单读取操作 Java领域解析.生成Excel比较有名的框架有Apache poi. jxl等.但他们都存在一个严重的问题就是 非常的耗内存.如果你的系统并发量不大的话可能还行,但 ...
最新文章
- 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来
- 日记 [2008年01月21日]
- usb 转 uart cp210x 驱动解析
- 多协程实例讲解(python 三)
- windows server 2003双网卡的问题
- 大幅提高Android开发效率之TemplateBuilder
- 引进博士:130平米住房+20万经费+15万年薪;硕士24万引进费+可聘讲师
- 刨根究底字符编码之十——Unicode字符集的编码方式以及码点、码元
- 程序员soul 012期|妹子|重庆
- Python练习题1.变量类型练习 华氏温度转摄氏温度 圆面积周长计算 判断闰年
- 同时查询多个快递单号物流最简单实用的方法
- 无需越狱,iPhone修改应用通知气泡颜色
- arm中r12(IP)的用途
- 安全合规/ISO--2--ISO 27001介绍
- 通俗易懂浅谈一下服务器异地容灾备份
- Keras Regressor回归(一)
- 排班源码,排班软件源码,排班系统源码,java,php,asp,asp.net,c#,python通用
- 一键导入excel到数据库的最佳实践
- 大咖说:蜂窝车联网(C-V2X)技术发展、应用及展望
- Latex中文模板--适用于{人文课程}