• EasyPOI解析Excel文件


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

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

    导入Maven依赖:

    <!-- 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)

    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模板定义模型,这里只演示最简单的模型定义,也没有增加校验信息,如果需要增加校验信息的可以,百度一下

    定义解析工具类:

    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方法了

    调用:

    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

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

  • 相关阅读:
    jdbc读取数据库表
    java中byte和blob互转
    mysql解决错误的方法-MySQL日志
    源码编译配置lnmp部署zabbix
    ssh后门反向代理实现内网穿透
    Cisco、HUAWEI、H3c、Firewall等设备配置snmp
    zabbix通过snmp监控网络设备
    centos/linux扩容Swap分区
    fork炸弹
    解决You have new mail in /var/spool/mail/root提示
  • 原文地址:https://www.cnblogs.com/flower-dance/p/14031557.html
Copyright © 2020-2023  润新知