之前写过一篇导出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
本文属于作者原创,未经允许,禁止转发