EasyPOI解析Excel文件

2020-11-27 14:47:36 浏览数 (2)

之前写过一篇导出Excel的文章,时隔这么长时间,再写一篇解析吧

采用EasyPOI技术解析Excel,我感觉这个还是挺好用的,也可能是我没有接触过更好的技术了[捂脸]

导入Maven依赖:

代码语言:javascript复制
<!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-web -->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-web</artifactId>
    <version>3.0.3</version>
</dependency>

根据Excel定义模型(Model)

代码语言:javascript复制
package model;

import cn.afterturn.easypoi.excel.annotation.Excel;

import java.io.Serializable;
import java.math.BigDecimal;

/**
    * 件
 * @author ZYGisComputer
 */
public class T0079J implements Serializable {
    /**
    * ID
    */
    private String f000Did;

    @Excel(name = "bh")
    private String bh;

    private String f001Pid;

    private String f004OrgCode;

    private String f011Dasjkzbz;

    private String f012Titleinitials;

    private BigDecimal numofefile;

    @Excel(name = "swwz")
    private String swwz;

    @Excel(name = "ycdd")
    private String ycdd;

    @Excel(name = "ycmc")
    private String ycmc;

    private String ycqm;

    @Excel(name = "ycrq")
    private String ycrq;

    @Excel(name = "ycsj")
    private String ycsj;

    
    @Excel(name = "zh")
    private String zh;

   
    @Excel(name = "zyyy")
    private String zyyy;

    public String getF000Did() {
        return f000Did;
    }
}

根据Excel模板定义模型,这里只演示最简单的模型定义,也没有增加校验信息,如果需要增加校验信息的可以,百度一下

定义解析工具类:

代码语言:javascript复制
package utils;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import exception.TypeMismatchException;
import model.T0079J;

import java.io.File;
import java.util.List;

/**
 * ExcelUtil 工具类
 * @author ZYGisComputer
 */
public class ExcelUtil {

    private static final String DIAN = ".";

    private static final String XLS = "xls";

    private static final String XLSX = "xlsx";

    public static List<T0079J> parseExcel(File file,Class<?> clazz) throws TypeMismatchException {
        if(checkIsExcel(file)){
            return ExcelImportUtil.importExcel(file, clazz, new ImportParams());
        }
        throw new TypeMismatchException("文件格式错误!");

    }

    public static boolean checkIsExcel(File file){
        if (null != file) {
            String fileName = file.getName();
            if(!fileName.contains(DIAN)){
                return false;
            }
            String type = fileName.substring(fileName.lastIndexOf(".")   1);
            return XLS.equalsIgnoreCase(type) || XLSX.equalsIgnoreCase(type);
        }
        throw new NullPointerException("文件为空");
    }

}

因为我的是文件直接写Main方法了

调用:

代码语言:javascript复制
package executer;

import exception.TypeMismatchException;
import model.T0079J;
import org.apache.commons.lang3.StringUtils;
import utils.ExcelUtil;

import java.io.File;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author ZYGisComputer
 */
public class ImportT0097J {

    public static void main(String[] args) throws TypeMismatchException {


        File file = new File("C:\File\2020-11\1.xls");

        List<T0079J> t0079JList = ExcelUtil.parseExcel(file, T0079J.class);

        for (T0079J x : t0079JList) {
            if (null!=x.getYcrq()) {
          // 格式化日期
                System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(x.getYcrq()));
            }
            if (null!=x.getYcsj()) {
          // 格式化日期
                System.out.println(new SimpleDateFormat("HH:mm").format(x.getYcsj()));
            }
//            System.out.println(x);
        }
        System.out.println(1);

    }

}

因为之前没有考虑日期的原因结果解析后的结果是直接的标准日期,处理起来比较费力

把模型中的ycrq和ycsj改为Date类型 util包下的

这样格式化日期比较简单

到此解析成功

因为数据是涉密的,就不贴正式的Excel和解析Excel的截图了

贴一个简单的吧

上面的首行名称对应 @Excel注解中的name值就可以了

比如这个图来说就是

@Excel(name="id")

@Excel(name="姓名")

....

不需要解析的字段不加@Excel就可以了

作者:彼岸舞

时间:20201124

内容关于:POI

本文属于作者原创,未经允许,禁止转发

0 人点赞