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、测试效果

 

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