Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)
通用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
以上代码如有问题,欢迎大佬们下方留言