Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)

时间:2022-06-17 07:26:09

通用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文件就是一个工作簿,一个工作簿包括多个表,一个表又有多行多列,从而划分成多个单元格。

Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)

知道了上面的基本知识,poi-ooxml就很好学了,它也是根据这种结构来划分类的。

HSSFWorkbook代表一个工作簿

HSSFSheet代表一个表

HSSFRow代表一行

HSSFCell代表一个单元格

本工具类就是基于上面的知识点再加上Apache-Commons实现的。

源码地址:https://github.com/cky-thinker/excelUtilDemo

以上代码如有问题,欢迎大佬们下方留言