今天因項目需要進行數據的導入,此處使用的是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、測試效果