通用excel與對象相互轉換的工具類
前言:最近開發需要一個Excel批量導入或者導出的功能,之前用過poi-ooxml開發過一個導入的工具類,正好蹭着這次機會,把工具類的功能進行完善。
使用說明:
(1)對象換成Excel,ExcelUtil#pojo2Excel(); 最后生成一個輸出流,可以用作文件生成或web中的上傳下載
方法參數:
* @param pojoList 對象數組
* @param out 輸出流
* @param alias (可選)默認生成表的列名為類的屬性名,可以通過此屬性指定,格式要求LinkedHashMap<”屬性名”,”列名”>
* @param headLine (可選)默認為類名,可通過此屬性指定表標題
使用示例:
@Test /** * 對象轉換成excel文件測試 * @throws Exception */ public void pojo2Excel1() throws Exception { //將生成的excel轉換成文件,還可以用作文件下載 File file = new File("C:\\Users\\chenkeyu\\Work\\1.xls"); FileOutputStream fos = new FileOutputStream(file); //對象集合 List<User> pojoList=new ArrayList<>(); for(int i=0;i<5;i++) { User user = new User(); user.setName("老李"); user.setAge(50); pojoList.add(user); } //設置屬性別名(列名) LinkedHashMap<String, String> alias = new LinkedHashMap<>(); alias.put("name", "姓名"); alias.put("age","年齡"); //標題 String headLine="用戶表"; ExcelUtil.pojo2Excel(pojoList, fos, alias, headLine); }
(2)Excel轉換成指定類型的對象數組 List<T> ExcelUtil#pojo2Excel();
參數解析:
* @param Class claz 要轉換的類型
* @param LinkedHashMap alias (可選)列所對應的屬性名,默認按屬性名解析,格式要求:LinkedHashMap<"列名","類屬性名">
測試:
@Test /** * excel文件轉換成對象測試 * @throws Exception */ public void excel2Pojo() throws Exception { //指定輸入文件 FileInputStream fis = new FileInputStream("C:\\Users\\chenkeyu\\Work\\1.xls"); //指定每列對應的類屬性 LinkedHashMap<String, String> alias = new LinkedHashMap<>(); alias.put("姓名","name"); alias.put("年齡","age"); //轉換成指定類型的對象數組 List<User> pojoList = ExcelUtil.excel2Pojo(fis, User.class, alias); logger.info(pojoList.toString()); }
代碼解析:
Maven依賴:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency>
本工具類是基於poi-ooxml的,要介紹poi就要先介紹一下Excel的結構:
眾所周知,一個最基本的Excel文件就是一個工作簿,一個工作簿包括多個表,一個表又有多行多列,從而划分成多個單元格。
知道了上面的基本知識,poi-ooxml就很好學了,它也是根據這種結構來划分類的。
HSSFWorkbook代表一個工作簿
HSSFSheet代表一個表
HSSFRow代表一行
HSSFCell代表一個單元格
本工具類就是基於上面的知識點再加上Apache-Commons實現的。
源碼地址:https://github.com/cky-thinker/excelUtilDemo
以上代碼如有問題,歡迎大佬們下方留言