有哪些是用到了网站推广,龙华网站建设的基本步骤,个人简历wordpress主题,计算机网页设计就业方向需求
将业务数据导出到excel中#xff0c;老牌的可以选择POI#xff0c;也有个新的选择EasyExcel。
有个小坑#xff0c;客户要求样式比较美观#xff0c;数字列要求千位符#xff0c;保留2位小数。 可以用代码实现但非常繁琐#xff0c;用模板就特别方便#xff0c;模…需求
将业务数据导出到excel中老牌的可以选择POI也有个新的选择EasyExcel。
有个小坑客户要求样式比较美观数字列要求千位符保留2位小数。 可以用代码实现但非常繁琐用模板就特别方便模板定义好格式填充数据即可。
于是开干
模板
在项目的src\main\resources\templates静态模板资源目录下如果templates不存在创建即可 settle.xlsx
注意下面的模板格式填充列表下面{.name}代表entity对应的字段
修改Entity实体加控制注解
注意两个注解 ExcelIgnore 标识这个字段不会处理 ExcelProperty(“结算金额”) 要处理的字段已经如果写入时列头的名称
package com.rlcloud.system.entity;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;/*** version v1.0 创建时间2023/11/27 16:36* author: 作者陈子枢* web CSDNhttps://blog.csdn.net/nutony* description 描述*/Data
NoArgsConstructor
AllArgsConstructor
TableName(tb_settle) //映射数据库表
public class Settle {//序列化时不采用long类型而采用string类型防止雪花精度丢失问题JsonSerialize(using ToStringSerializer.class)TableId(type IdType.ASSIGN_ID) //主键生成策略雪花ExcelIgnoreprivate Long id;NotNull(message 结算批次不能为空)ExcelProperty(结算批次)private String batch;NotNull(message 结算日期不能为空)ExcelProperty(结算日期)private String dtTimeArr;NotNull(message 业务量不能为空)ExcelProperty(业务量)private BigDecimal volumeAmt;NotNull(message 结算金额不能为空)ExcelProperty(结算金额)private BigDecimal settleAmt;ExcelIgnoreprivate String createBy;ExcelIgnoreprivate Date createTime;
}
Controller代码 GetMapping(/ljt/settle/export)public void export(HttpServletResponse response) throws IOException {QueryWrapper qw new QueryWrapper();qw.orderByDesc(create_time);//查询数据ListSettle dataList settleService.list(qw);//此处getResourceAsStream 用于获取服务器打包后的Excel模板文件流;//如果采用getPath方法获取文件地址本地ieda环境可以获取到上传到服务器后会失效。采用流可以都生效具体原因暂未仔细查看。有兴趣的童鞋可以自己去尝试InputStream resourceAsStream ResourceUtil.getStream(classpath:templates/settle.xlsx);//读取Excel 根据指定模板导出ExcelWriter excelWriter EasyExcel.write(getOutputStream(结算数据.xlsx,response)).withTemplate(resourceAsStream).excelType(ExcelTypeEnum.XLSX).build();WriteSheet writeSheet EasyExcel.writerSheet().build();FillConfig fillConfig FillConfig.builder().forceNewRow(true).build(); //关键多组数据填充需要另起一行默认为false//直接写入Excel数据(list是我查询并需导出的数据并且里面的字段和excel需要导出的字段对应)excelWriter.fill(dataList, fillConfig, writeSheet); //注意模板中需要写变量{.name}excelWriter.finish();}public static OutputStream getOutputStream(String fileName, HttpServletResponse response) {try {fileName URLEncoder.encode(fileName, UTF-8);response.setContentType(application/vnd.ms-excel);response.setCharacterEncoding(utf8);response.setHeader(Content-Disposition, attachment; filename fileName .xls);response.setHeader(Pragma, public);response.setHeader(Cache-Control, no-store);response.addHeader(Cache-Control, max-age0);return response.getOutputStream();} catch (IOException e) {log.error(导出excel表格失败, e);}return null;}