之前寫過一篇導出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
本文屬於作者原創,未經允許,禁止轉發