当前位置: 首页 > news >正文

详细聊下easyexcel导出

之前介绍了下复杂表头的导出,如果是那种非常简单的只是一行表头的导出,可以这样处理
pom背景

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.0</version></dependency>

easyexcel版本需要跟poi保持对应官网地址
我因为是旧版本poi就使用的是2.2.6版本(升级poi代价有点大许多方法不能用了)
在这里插入图片描述
先上标准的导出dto文件

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;import java.math.BigDecimal;
import java.util.Date;public class UserExportDto {@ExcelProperty(value = "名字")private String name;@ExcelProperty(value = "年纪")private Integer age;@ExcelProperty(value = "时间1")@DateTimeFormat("yyyy/MM/dd")@ColumnWidth(18)private Date vDate;@ExcelProperty(value = "时间2")@DateTimeFormat("yyyy/MM/dd")@ColumnWidth(18)private Date mDate;@ExcelProperty(value = "比例")private BigDecimal value;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getvDate() {return vDate;}public void setvDate(Date vDate) {this.vDate = vDate;}public Date getmDate() {return mDate;}public void setmDate(Date mDate) {this.mDate = mDate;}public BigDecimal getValue() {return value;}public void setValue(BigDecimal value) {this.value = value;}
}

这里格式化了时间yyyy/MM/dd
导出文件代码

ExcelWriter excelWriter = EasyExcel.write("D://1.xlsx").registerWriteHandler(new HeaderWriteHandler()).registerWriteHandler(new DateTimeWriteHandler()).registerWriteHandler(new PercentWriteHandler()).build();WriteSheet sheet = EasyExcel.writerSheet(0,"用户").head(UserExportDto.class).build();List<UserExportDto> dtos = initData();excelWriter.write(dtos,sheet);excelWriter.finish();

post请求的话把第一行改成

ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream)

低版本的easyexcel导出的时间、数值在excel里都是文本格式的,如果有严格的版本要求可以参考我以下代码
标题背景色代码HeaderWriteHandler

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.StyleUtil;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.style.AbstractCellStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;public class HeaderWriteHandler extends AbstractCellStyleStrategy implements CellWriteHandler {private XSSFCellStyle headCellStyle;@Overrideprotected void initCellStyle(Workbook workbook) {headCellStyle = (XSSFCellStyle) StyleUtil.buildHeadCellStyle(workbook,null);headCellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(245,233,245,255)));headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);Font font = workbook.createFont();font.setFontHeightInPoints((short) 11);font.setBold(true);headCellStyle.setFont(font);}@Overrideprotected void setHeadCellStyle(Cell cell, Head head, Integer integer) {cell.setCellStyle(headCellStyle);}@Overrideprotected void setContentCellStyle(Cell cell, Head head, Integer integer) {}
}

时间格式化代码DateTimeWriteHandler

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class PercentWriteHandler implements CellWriteHandler {private static final Logger logger = LoggerFactory.getLogger(PercentWriteHandler.class);private static Set<String> DATA_SET = new HashSet<>(Arrays.asList("value"));private CellStyle cellStyle;@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean isHead) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean isHead) {}@Overridepublic void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean isHead) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean isHead) {if(!isHead && DATA_SET.contains(head.getFieldName())){if(cell==null){return;}//不同版本这个不一样看情况if(cell.getCellType()!= CellType.NUMERIC){return;}Workbook workbook = writeSheetHolder.getSheet().getWorkbook();DataFormat dataFormat = workbook.createDataFormat();short percentFormat = dataFormat.getFormat("0.00%");if(cellStyle == null){cellStyle = workbook.createCellStyle();cellStyle.setDataFormat(percentFormat);}//应用样式到单元格cell.setCellStyle(cellStyle);}}
}

百分比格式化代码PercentWriteHandler

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class PercentWriteHandler implements CellWriteHandler {private static final Logger logger = LoggerFactory.getLogger(PercentWriteHandler.class);private static Set<String> DATA_SET = new HashSet<>(Arrays.asList("value"));private CellStyle cellStyle;@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean isHead) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean isHead) {}@Overridepublic void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean isHead) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean isHead) {if(!isHead && DATA_SET.contains(head.getFieldName())){if(cell==null){return;}//不同版本这个不一样看情况if(cell.getCellType()!= CellType.NUMERIC){return;}Workbook workbook = writeSheetHolder.getSheet().getWorkbook();DataFormat dataFormat = workbook.createDataFormat();short percentFormat = dataFormat.getFormat("0.00%");if(cellStyle == null){cellStyle = workbook.createCellStyle();cellStyle.setDataFormat(percentFormat);}//应用样式到单元格cell.setCellStyle(cellStyle);}}
}

截图展示下具体的结果
标题背景浅粉红色,字体加粗等等
在这里插入图片描述

时间筛选的时候是这样的
在这里插入图片描述
百分比显示保留2位,但是原始值仍然存在
在这里插入图片描述
对了如果提示导出报错类不存在org/objectweb/asm/Type
pom文件引入一个包即可

<dependency><groupId>org.ow2.asm</groupId><artifactId>asm</artifactId><version>7.0</version></dependency>
http://www.dtcms.com/a/306193.html

相关文章:

  • 实例教学FPN原理与PANet,Pytorch逐行精讲实现
  • 【源力觉醒 创作者计划 】文心大模型4.5系列与DeepSeek、通义千问Qwen 3.0深度对比分析
  • 人工智能与安全:智能安防的创新与伦理边界
  • pycharm中debug的一些小细节
  • 压敏电阻的选型与计算分析
  • YOLO-01目标检测基础
  • 电子对抗技术在特种车辆中的实战应用与发展解析
  • windows环境下MySQL 8.0 修改或重置密码
  • mysql创建一个管理员用户
  • 《校园生活平台从 0 到 1 的搭建》第五篇:商品后端
  • 《零基础入门AI:传统机器学习核心算法解析(KNN、模型调优与朴素贝叶斯)》
  • Java Stream核心:ReferencePipeline解析
  • 如何判断一个数据库是不是出问题了?
  • Python处理JSON和Excel文件的转换
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(一级)
  • Elasticsearch 8.19.0 和 9.1.0 中 LogsDB 和 TSDS 的性能与存储改进
  • 分布式搜索和分析引擎Elasticsearch实战指南
  • Expected one result (or null) to be returned by selectOne(), but found: 2
  • 《从 Vim 新手到“键圣”:我的手指进化史》
  • ISO 26262功能安全软硬件接口定义方法
  • java web jsp 静态页面和动态页面对比。动态页面实现分页效果
  • 不同环境安装配置redis
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(四)
  • 第2课:几何数学
  • spring学习笔记一
  • 如何理解时间复杂度
  • 【世纪龙科技】比亚迪电动汽车技术仿真教学软件-助力人才培养
  • idea 集成飞算Java AI 教程
  • Mac下的Homebrew
  • 《Sentinel服务保护实战:控制台部署与SpringCloud集成指南》