【EasyExcel】 easyExcel 3.2.1 生成多sheet的xlsx文件
pom依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.2.1</version> </dependency>
核心util写法:
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.util.List; /** * xlsx工具类 * @date 2025/02/05 */ @Slf4j public class XlsxUtil { public static String createMultiSheetXlsx(String fileName, List<XlsxSheetVO> multiSheetList){ String tempFilePath = "/" + fileName + ".xlsx"; ExcelWriter excelWriter = EasyExcel.write(tempFilePath).build(); for (XlsxSheetVO xlsxSheetVO : multiSheetList) { WriteSheet writeSheet = EasyExcel.writerSheet(xlsxSheetVO.getSheetName()).head(xlsxSheetVO.getClazz()).build(); excelWriter.write(xlsxSheetVO.getContext(), writeSheet); } // 关闭writer,释放内存 excelWriter.finish(); log.info("create createMultiSheetXlsx file success, file path: {}", tempFilePath); return tempFilePath; } public static void deleteFile(String filePath) { File file = new File(filePath); if (file.exists()) { if (file.isDirectory()) { // 如果是目录,递归删除目录下的所有文件和子目录 deleteDirectory(file); } else { // 如果是文件,直接删除 file.delete(); } log.info("delete file success, file path: {}", filePath); } else { log.info("file not exist, file path: {}", filePath); } } private static void deleteDirectory(File directory) { File[] files = directory.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { deleteDirectory(file); // 递归删除子目录 } else { file.delete(); // 删除文件 } } } directory.delete(); // 删除空目录 } }
支持多个sheet的dto:
import lombok.Data; import java.util.List; /** * 支持多个sheet的xlsxSheetVO */ @Data public class XlsxSheetVO { private String sheetName; private List<?> context; private Class<?> clazz; }
入口大概这样:
List<StampInventoryReportVo> stampInventoryReportVos = new ArrayList<>(); List<StampInventorySimpleReportVo> simpleReportVos = new ArrayList<>(); XlsxSheetVO sheet1 = new XlsxSheetVO(); sheet1.setSheetName("ALL"); sheet1.setContext(stampInventoryReportVos); sheet1.setClazz(StampInventoryReportVo.class); XlsxSheetVO sheet2 = new XlsxSheetVO(); sheet2.setSheetName("差異數據"); sheet2.setContext(simpleReportVos); sheet2.setClazz(StampInventorySimpleReportVo.class); List<XlsxSheetVO> multiSheetList = Lists.newArrayList(); multiSheetList.add(sheet1); multiSheetList.add(sheet2); String tempXlsxPath = XlsxUtil.createMultiSheetXlsx(fileName, multiSheetList);
生成文件如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix