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

EasyPoi相关文档与使用工具类

工作中的很多项目都是基于EasyPoi的,但其官网截至2024年11月18日已经无法打开了。考虑到还有很多人在使用,更利于读者阅读及理解。

文档地址

ApiDoc:https://apidoc.gitee.com/lemur/easypoi/

官网地址:http://doc.wupaas.com/docs/easypoi

EasyPoi官方文档优化版: https://www.yuque.com/guomingde/easypoi

工具类

导入jar包

        <!-- easy-poi --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency>

工具类编写

package com.example.excel.easy_poi.common.util;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author: reshui* description:* DateTime:2025/5/8-17:22*/
@Slf4j
public class EasyPoiExcelUtil {/*** 文件暂存地址*/private static final String TEMP_FILE_PATH = System.getProperty("java.io.tmpdir");/*** 文件暂存地址*/private static final String PARENT_FILE_PATH = TEMP_FILE_PATH + File.separator + "easy_poi_excel";/*** 时间格式*/private static final String TIMESTAMP_FORMAT = "yyyyMMddHHmmss";private static File createExcel(String fileName) {String formatDateTimeStamp = DateUtil.format(new Date(), TIMESTAMP_FORMAT);String resultFileName = StrUtil.isNotBlank(fileName) ? fileName + StrUtil.UNDERLINE + formatDateTimeStamp : formatDateTimeStamp;String filePath = PARENT_FILE_PATH + File.separator + resultFileName + ".xlsx";FileUtil.touch(filePath);return new File(filePath);}/*** @param fileName     文件名* @param exportParams exportParams设置excel内置标题和sheet名称* @param clazz        映射实体类* @param data         数据*/public static File generateExcelToLocal(String fileName, ExportParams exportParams, Class<?> clazz, List<?> data) {File excel = createExcel(fileName);log.info("生成Excel文件:{}", excel.getAbsolutePath());generateExcelToLocal(exportParams, clazz, data, excel);return excel;}/*** @param exportParams exportParams设置标题和sheet名称* @param clazz        映射实体类* @param data         数据* @param saveFile     存储文件file*/public static void generateExcelToLocal(ExportParams exportParams, Class<?> clazz, List<?> data, File saveFile) {Workbook workbook = null;FileOutputStream fos = null;try {fos = new FileOutputStream(saveFile);workbook = ExcelExportUtil.exportExcel(exportParams, clazz, data);workbook.write(fos);workbook.close();} catch (Exception e) {log.error("导出Excel异常:", e);} finally {try {if (workbook != null) {workbook.close();}if (fos != null) {fos.close();}} catch (IOException e) {log.error("关闭资源时出现异常", e);}}}public static void generateExcelAndDownload(HttpServletResponse response, ExportParams exportParams, Class<?> clazz, List<?> data, String fileName) throws IOException {Workbook workbook = null;OutputStream outputStream = null;try {workbook = ExcelExportUtil.exportExcel(exportParams, clazz, data);response.setCharacterEncoding("UTF-8");response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");outputStream = response.getOutputStream();workbook.write(outputStream);workbook.close();} catch (Exception e) {log.error("导出easy-Excel异常:", e);response.reset();response.setContentType("application/json");response.setCharacterEncoding("utf-8");Map<String, String> map = new HashMap<String, String>();map.put("status", "failure");map.put("message", "下载文件失败" + e.getMessage());response.getWriter().println(JSON.toJSONString(map));} finally {try {// 关闭工作簿if (workbook != null) {workbook.close();}// 关闭输出流if (outputStream != null) {outputStream.close();}} catch (IOException e) {log.error("关闭资源时出现异常", e);}}}/*** 通用的 Excel 导入方法* @param file 上传的 Excel 文件* @param clazz 要导入的数据类型的 Class 对象* @param titleRows 标题所占的行数* @param headRows 表头所占的行数* @param <T> 泛型类型,表示要导入的数据类型* @return 包含导入数据的列表* @throws Exception 当读取文件输入流出现异常时抛出*/public static <T> List<T> importExcel(MultipartFile file, Class<T> clazz, int titleRows, int headRows) throws Exception {// 导入配置参数ImportParams params = new ImportParams();// 标题占几行params.setTitleRows(titleRows);// 表头占几行params.setHeadRows(headRows);// 参数1:输入流  参数2:导入的数据类型  参数3:导入配置参数return ExcelImportUtil.importExcel(file.getInputStream(), clazz, params);}
}

效果图

注意:easypoi支持等层嵌套集合导出,不支持多层嵌套集合导入,支持单层嵌套集合导出和导入(源码层面可以窥探得知)

http://www.xdnf.cn/news/358633.html

相关文章:

  • MySQL 8.0 OCP 英文题库解析(二)
  • JAVA包装类
  • YOLOv8目标检测性能优化:损失函数改进的深度剖析
  • SPDK NVMe of RDMA 部署
  • DNS DDoS攻击:网络世界中的“洪水猛兽”
  • Spring框架(1)
  • 双端口ram与真双端口ram的区别
  • COASWT区域海-气-浪耦合模式
  • SEMI E94-0200 PROVISIONAL SPECIFICATION FOR CONTROL JOB MANAGEMENT(控制作业管理暂行规范)
  • 从零打造企业级Android木马:数据窃取与远程控制实战
  • 从概念表达到安全验证:智能驾驶功能迎来系统性规范
  • golang -- 如何获取变量类型
  • uniapp-商城-47-后台 分类数据的生成(通过数据)
  • Eclipse SWT 1 等比缩放
  • 菜鸟之路Day30一一MySQL之DMLDQL
  • 常见降维算法分析
  • C++进阶--红黑树的实现
  • .NET高频技术点(持续更新中)
  • 适老化洗浴辅具产业:在技术迭代与需求升级中重塑银发经济新生态
  • Vue——Axios
  • 通信协议选型篇:如何根据项目需求选择合适的通信协议?
  • 线段树:数据结构中的超级英雄
  • kafka学习笔记(四、生产者、消费者(客户端)深入研究(三)——事务详解及代码实例)
  • 一、对linux驱动文件编写时结构认识与记录
  • A* (AStar) 寻路
  • 读取传感器发来的1Byte数据:分低位先行和高位先行的处理方法
  • 【iptables】--命令基本使用
  • Web 架构之数据读写分离
  • 配置Java Selenium Web自动化测试环境
  • 5.0.5 变换(旋转、缩放、扭曲)