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);}
}