今天因项目需要进行数据的导入,此处使用的是hutool-4.1.19版本,以及poi-3.16版本做的demo(貌似不支持更高版本的poi依赖,但建议你们可以去试下),好了,废话不多说,直接上代码。
一、首先是两个依赖jar包
<!--工具包--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.1.19</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version> </dependency>
二、自己编写一个导入工具类
整体思路大概就是获取excel文件流,然后根据hutool提供的reader方法读取excel表中的数据。一句话就完了?没错,使用工具就是那么简单,因为大部分繁琐的工做别人都已经帮我们写好了,只要你善用就ok了。
1、先预备好一个excel文件
2、编写一个java工具类
此处只编写了返回List<Map>以及List<Bean> 两种方法,想要了解更多请查看hutool官方文档
package com.demo.utils; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import org.apache.commons.lang.ArrayUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; import java.util.Map; /** * @Author jchw * @CreateTime 2019/6/21 17:57 * @Version 1.0 * @Descr **/ public class ImportExcel { /** * 读取excel表格内容返回List<Map> * @param inputStream excel文件流 * @param head 表头数组 * @param headerAlias 表头别名数组 * @return */ public static List<Map<String,Object>> importExcel(InputStream inputStream, String[] head, String[] headerAlias){ ExcelReader reader = ExcelUtil.getReader(inputStream); List<Object> header=reader.readRow(1); //替换表头关键字 if(ArrayUtils.isEmpty(head)||ArrayUtils.isEmpty(headerAlias)||head.length!=headerAlias.length){ return null; }else{ for(int i=0;i<head.length;i++){ if(head[i].equals(header.get(i))){ reader.addHeaderAlias(head[i],headerAlias[i]); }else{ return null; } } } //读取指点行开始的表数据(以下介绍的三个参数也可以使用动态传入,根据个人业务情况修改) //1:表头所在行数 2:数据开始读取位置 Integer.MAX_VALUE:数据读取结束行位置 List<Map<String,Object>> read = reader.read(1,2,Integer.MAX_VALUE); return read; } /** * 读取excel表格内容返回List<Bean> * @param inputStream excel文件流 * @param head 表头数组 * @param headerAlias 表头别名数组 * @return */ public static <T>List<T> importExcel(InputStream inputStream, String[] head, String[] headerAlias,Class<T> bean){ ExcelReader reader = ExcelUtil.getReader(inputStream); List<Object> header=reader.readRow(1); //替换表头关键字 if(ArrayUtils.isEmpty(head)||ArrayUtils.isEmpty(headerAlias)||head.length!=headerAlias.length){ return null; }else{ for(int i=0;i<head.length;i++){ if(head[i].equals(header.get(i))){ reader.addHeaderAlias(head[i],headerAlias[i]); }else{ return null; } } } //读取指点行开始的表数据(从0开始) List<T> read = reader.read(1,2,bean); return read; }public static void main(String[] args) { try { InputStream inputStream=new FileInputStream(new File("C:\\Users\\jchw\\Desktop\\用户数据导入模板_old.xlsx")); String[] excelHead={"*用户账号","*用户姓名","部门代码","*部门名称","标签代码","*标签名称"}; String[] excelHeadAlias={"username","realName","deptCode","deptName","labelCode","labelName"}; List<Map<String,Object>> result=ImportExcel.importExcel(inputStream,excelHead,excelHeadAlias); System.out.println(result); } catch (FileNotFoundException e) { e.printStackTrace(); }}
3、测试效果