之前寫過一篇導出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包下的
這樣格式化日期比較簡單
到此解析成功
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5icmhDbyBHb65mbvwVO2MzMxgzNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
因為資料是涉密的,就不貼正式的Excel和解析Excel的截圖了
貼一個簡單的吧
上面的首行名稱對應 @Excel注解中的name值就可以了
比如這個圖來說就是
@Excel(name="id")
@Excel(name="姓名")
....
不需要解析的字段不加@Excel就可以了
作者:彼岸舞
時間:2020\11\24
内容關于:POI
本文屬于作者原創,未經允許,禁止轉發