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就可以了
作者:彼岸舞
时间:2020\11\24
内容关于:POI
本文属于作者原创,未经允许,禁止转发