好用的 easyExcel 工具类
时间:2021-07-31
本文章向大家介绍好用的 easyExcel 工具类,主要包括好用的 easyExcel 工具类使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.write.handler.WriteHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; @Slf4j public class ExcelUtils { private static final String FILE_SUFFIX = ".xlsx"; /** * 导出excel * @param response * @param fileName 文件名 * @param sheetName sheet名 * @param list 数据 list为空返回 空Excel */ public static void export(HttpServletResponse response, String fileName, String sheetName, List<?> list, Class<?> zlass) throws Exception { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileNameCode = URLEncoder.encode(fileName, StandardCharsets.UTF_8); response.setHeader("Content-disposition", "attachment;filename=" + fileNameCode + FILE_SUFFIX); EasyExcel.write(response.getOutputStream(), zlass) .sheet(sheetName).doWrite(list); } /** * excel导出 批注 * @param response * @param fileName 文件名 * @param list 导出数据 * @param writeHandler 批注拦截器 */ public static void export(HttpServletResponse response, String fileName, List list, WriteHandler writeHandler, Class zlass) throws Exception { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileNameCode = URLEncoder.encode(fileName, StandardCharsets.UTF_8); response.setHeader("Content-disposition", "attachment;filename=" + fileNameCode + FILE_SUFFIX); EasyExcel.write(response.getOutputStream(), zlass) .inMemory(Boolean.TRUE).registerWriteHandler(writeHandler) .sheet(fileName).doWrite(list); } /** * 导出Excel * @param response * @param fileName 文件名 * @param list 导出数据 * @return void */ public static void export(HttpServletResponse response, String fileName, List<?> list, Class<?> zlass) throws Exception { export(response, fileName, fileName, list, zlass); } /** * 读取excel文件 * @param file 文件 * @param clazz 模板类 * @return java.util.List */ public static <T> List<T> read(MultipartFile file, Class<T> clazz) { try { return EasyExcel.read(new BufferedInputStream(file.getInputStream())).head(clazz).sheet() .doReadSync(); } catch (IOException e) { e.printStackTrace(); } return null; } public static List<LinkedHashMap<Integer, Object>> readExcel(InputStream inputStream) { return EasyExcel.read(inputStream).headRowNumber(0).autoCloseStream(true).doReadAllSync(); } public static List<LinkedHashMap<Integer, Object>> readExcel(InputStream inputStream, String sheetName) { return EasyExcel.read(inputStream).headRowNumber(0).autoCloseStream(true).sheet(sheetName).doReadSync(); } public static List<LinkedHashMap<Integer, Object>> readExcel(InputStream inputStream, Integer sheetIndex) { return EasyExcel.read(inputStream).headRowNumber(0).autoCloseStream(true).sheet(sheetIndex).doReadSync(); } public static Map<String, List<LinkedHashMap<Integer, Object>>> readNameExcel(InputStream inputStream, List<ReadSheet> readSheets) { SyncManySheetNameReadListener syncReadListener = new SyncManySheetNameReadListener(); EasyExcel.read(inputStream).registerReadListener(syncReadListener).autoCloseStream(true) .build().read(readSheets).finish(); return syncReadListener.getMap(); } public static Map<Integer, List<LinkedHashMap<Integer, Object>>> readIndexExcel(InputStream inputStream, List<ReadSheet> readSheets) { SyncManySheetIndexReadListener syncReadListener = new SyncManySheetIndexReadListener(); EasyExcel.read(inputStream).registerReadListener(syncReadListener).autoCloseStream(true) .build().read(readSheets).finish(); return syncReadListener.getMap(); } public static Map<String, List<LinkedHashMap<Integer, Object>>> readExcel(List<String> sheetNames, InputStream is) { Map<String, List<LinkedHashMap<Integer, Object>>> data; if(DataUtils.isEmpty(sheetNames)) { data = new HashMap<>(); data.put("", ExcelUtils.readExcel(is)); } else { List<ReadSheet> list = new ArrayList<>(); for(String name : sheetNames) { list.add(new ReadSheet(null, name)); } data = readNameExcel(is, list); } return data; } public static String getAsString(LinkedHashMap<Integer, Object> cell, int i) { Object o = cell.get(i); if(o == null) { return null; } return o.toString(); } private static class SyncManySheetNameReadListener extends AnalysisEventListener<Object> { private Map<String, List<LinkedHashMap<Integer, Object>>> map = new HashMap<>(); public SyncManySheetNameReadListener() { } public void invoke(Object object, AnalysisContext context) { map.computeIfAbsent(context.readSheetHolder().getSheetName(), a -> new ArrayList<>()).add((LinkedHashMap<Integer, Object>) object); } public void doAfterAllAnalysed(AnalysisContext context) { } public Map<String, List<LinkedHashMap<Integer, Object>>> getMap() { return this.map; } } private static class SyncManySheetIndexReadListener extends AnalysisEventListener<Object> { private Map<Integer, List<LinkedHashMap<Integer, Object>>> map = new HashMap<>(); public SyncManySheetIndexReadListener() { } public void invoke(Object object, AnalysisContext context) { map.computeIfAbsent(context.readSheetHolder().getSheetNo(), a -> new ArrayList<>()).add((LinkedHashMap<Integer, Object>) object); } public void doAfterAllAnalysed(AnalysisContext context) { } public Map<Integer, List<LinkedHashMap<Integer, Object>>> getMap() { return this.map; } } }
原文地址:https://www.cnblogs.com/math-and-it/p/15084790.html
- spring-boot 速成(7) 集成dubbo
- spring-boot 速成(8) 集成druid+mybatis
- Java常用类(一)之Object类详解
- .NET魔法堂:工程构建基石->MSBuild
- 微信小程序能干哪些事,有什么优势?
- 如何告诉手机我是“我”呢?
- 没有任何类型 Windows 的外层实例可访问---Java内部类与外类型
- Hadoop(十二)MapReduce概述
- 安卓第一夜 第一个应用
- spring cloud 学习(1) - 基本的SOA示例
- SVN冲突
- 什么叫微信小程序分销系统?如何通过分销系统来实现你的创业梦
- Hadoop(十一)Hadoop IO之序列化与比较功能实现详解
- 安卓第五夜 维纳斯的诞生
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP中$_SERVER的详细参数
- R语言使用贝叶斯层次模型进行空间数据分析
- PHP中的小数取整
- PHP中文获取拼音函数
- PHP5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
- PHP获取中文拼音首字符方法
- PHP_MySQL笔试题目一
- nginx+nginx-upsync-module实现动态负载及自定义验证
- np.diff函数
- PHP对Json字符串解码返回NULL的一般解决方案
- 记一次 Istio 云数据库连接失败的错误排查过程
- PHP对抗web扫描器的脚本技巧
- MTO Jmetal IGD计算BUG
- 《算法》读书笔记:1.1 基础编程模型
- 《剑指 offer》刷题记录之:查找和排序