java 使用hutool工具以及poi3.16進行Excel導入(可指定行開始獲取數據)

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

另:Hutool是個很好用的java工具類,可以去了解下

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、測試效果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章