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

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

 

posted @ 2018-02-24 15:07 宇的季节 阅读(...) 评论(...) 编辑 收藏