EasyExcel 简单介绍
- AnalysisEventListener EasyExcel 提供的抽象类 继承该类可以灵活操作 读取的 excel 数据
- AbstractRowWriteHandler EastExcel 提供的抽象类,继承此类可以灵活设置 excel 样式,使用原生 poi 接口,正常使用无需关注
- EasyExcelListener 是我抽象出来的 平时如果没有对导入的 excel 数据灵活操作的都可以使用该类,正常使用无需关注
注解介绍
//-----------------------常用注解介绍------------------------------------//
@ExcelProperty //使用最多的 定义字段 目前如果不标准字段注解 EasyExcel是会自动处理的 不会忽略
@ExcelIgnore //忽略无用字段
@ExcelIgnoreUnannotated //忽略所有未添加ExcelProperty注解的字段
//-----------------------格式化注解介绍------------------------------------//
@DateTimeFormat //时间格式化
@NumberFormat //数字格式化
//-----------------------样式注解---------------------------------------//
@ColumnWidth //表格宽度
@ContentFontStyle //表格的内容字体设置
@ContentLoopMerge //表格区域合并
@ContentRowHeight//设置表格的高度
@ContentStyle //区域样式
@HeadFontStyle //表格的头字体设置
@HeadRowHeight /表格的头高度设置
@HeadStyle //字符串的头背景设置
@OnceAbsoluteMerge //合并单元格一次
简单使用
上传
/**
* 文件上传
*/
@PostMapping("/upload")
@ResponseBody
public List<TestEasyData> upload(MultipartFile file) throws IOException {
//读取数据行
List<TestEasyData> testEasyData = EasyExcelUtil.readExcel(file.getInputStream(), TestEasyData.class);
return testEasyData;
}
下载
/**
* 文件下载
*/
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
List<TestEasyData> data = data();
// 请直接用浏览器或者用postman
EasyExcelUtil.writeExcel(response,"测试工具类",data,TestEasyData.class,"第一个表格");
}
工具类封装
public class EasyExcelUtil {
/**
* 读取第一个 sheet 的 Excel
*
* @param stream 文件
* @param tClass 实体类映射,
* @return Excel 数据 list
*/
public static <T> List<T> readExcel(InputStream stream, Class<T> tClass) {
return readExcel(stream,tClass,1);
}
/**
* 读取某个 sheet 的 Excel
*
* @param stream 文件
* @param tClass 实体类映射
* @param sheetNo sheet 的序号 从1开始 /sheetNO 为空则读取第一个sheetNO
* @return Excel 数据 list
*/
public static <T> List<T> readExcel(InputStream stream, Class<T> tClass,Integer sheetNo) {
if (Objects.isNull(sheetNo)||sheetNo==0){
sheetNo=1;
}
EasyExcelListener<T> listener=new EasyExcelListener<T>();
//easyExcel sheetNo从零开始
EasyExcel.read(stream, tClass, listener).sheet(sheetNo-1).doRead();
return listener.getDatas();
}
/**
* 导出 Excel :一个 sheet,带表头
*
* @param outputStream OutputStream
* @param list 数据 list,
* @param clazz 导出结构体
* @param sheetName 导入文件的 sheet 名
*/
public static <T> void writeExcel(OutputStream outputStream,List<T> list,Class clazz,String sheetName) {
EasyExcel.write(outputStream,clazz).sheet(sheetName).doWrite(list);
}
/**
* 导出 Excel 直接可以在Spring web Controller 中使用
*
* @param response HttpServletResponse
* @param fileName 文件名
* @param list 数据 list,
* @param clazz 导出结构体
* @param sheetName 导入文件的 sheet 名
*/
public static <T> void writeExcel(HttpServletResponse response, String fileName, List<T> list, Class<T> clazz, String sheetName) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileNameEnCode = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "+");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEnCode + ".xlsx");
writeExcel(response.getOutputStream(),list,clazz,sheetName);
}
}
使用到的类
java
@Data
// 头背景设置
@HeadStyle(fillPatternType = FillPatternType.NO_FILL, fillForegroundColor = 10)
// 头字体设置成20
@HeadFontStyle(fontHeightInPoints = 12)
@HeadRowHeight(value = 60)
public class TestEasyData {
@ExcelProperty(value = "编码")
private String code;
@ExcelProperty(value = "名字")
private String name;
@ExcelProperty(value = "数字")
private Double number;
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于