java解析EasyExcel工具的使用
底层是一行一行读取表格中的内容
阿里的
一、 监听器方法(高级)
--EasyExcel写操作----
1导入依赖 两个
<!-- EasyExcel 还需要poi的依赖 父pom里面有了 <poi.version>3.17</poi.version> https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version> </dependency>
2设置写入类
package until.easyExcel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class DemoEasyExcel { //设置表头名称 @ExcelProperty private Integer sno; @ExcelProperty private String sname; }
3先把数据写入到类中 再调用esaySexcel的方法写入excel中
@Test public void easyexcelwrite(){ //设置生成的文件地址 String fileName="D:\\Test\\write.xls"; // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 //调用方法实现 EasyExcel.write(fileName, DemoEasyExcel.class).sheet("写入方法一").doWrite(getData()); //文件 类 sheet名字 写入数据 } //设置类的数据 就是先把数据放到类里面 public List<DemoEasyExcel> getData(){ List<DemoEasyExcel> list = new ArrayList<DemoEasyExcel>(); for (int i = 0; i < 10; i++) { DemoEasyExcel data = new DemoEasyExcel(); data.setSno(i); data.setSname("张三"+i); list.add(data); } return list; }
--EasyExcel读操作----
1导入依赖 如上
2 设置存储excel内容的一个类
package until.easyExcel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class ReadEasyExcel { //设置表头名称 @ExcelProperty(value = "学号", index = 0) private Integer sno; @ExcelProperty(value = "姓名",index = 1) private String sname; }
3设置监听器 实现AnalysisEventListener 注意泛型
package until.easyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ExcelListener extends AnalysisEventListener<ReadEasyExcel> { //创建list集合封装最终的数据 // List<ReadEasyExcel> list = new ArrayList<ReadEasyExcel>(); //读取excel内容 @Override public void invoke(ReadEasyExcel readEasyExcel, AnalysisContext analysisContext) { System.out.println("数据:"+readEasyExcel); } //读取表头的方法 @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { System.out.println("表头:"+headMap); } //读取完成之后执行的方法 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { System.out.println("结束"); } }
4 设置excel文件位置
调用excel 方法 实现
package until.easyExcel; import com.alibaba.excel.EasyExcel; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class TestReadDemo { @Test public void easyexcelwrite(){ //设置被读取的文件地址 String fileName="D:\\Test\\write.xls"; //读到这个类里面 EasyExcel.read(fileName,ReadEasyExcel.class,new ExcelListener()).sheet().doRead(); } }
二 、非监听器方法(简单使用)
Excel写入数据库
把excel导入进入数据库 @PostMapping("readExcel") public R readExcel(MultipartFile file) throws Exception{ List<ExcelSubjectData> objectList = EasyExcel.read(file.getInputStream()) .head(ExcelSubjectData.class) .sheet() .headRowNumber(1) .doReadSync(); log.info(String.valueOf(objectList)); // 调用方法把数据存入数据库里 eduSubjectService.savaSubject2(file); return R.ok(); }
从sql中读取数据到excel
@Override //sql导入excel public void exportExcel(HttpServletResponse response) { //设置生成的文件地址 // String fileName="D:\\Test\\write.xls"; // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 //调用方法实现 try { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 String fileName = URLEncoder.encode("数据表2", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // String fileName="D:\\Test\\write2.xls"; EasyExcel.write(response.getOutputStream(), ExcelSubjectData.class).sheet("写入方法一").doWrite(getData()); log.info(String.valueOf(getData())); // EasyExcel.write //文件 类 sheet名字 写入数据 } catch (Exception e) { // 重置response\ response.reset(); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)