zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    2016/01/14开始学习git:标签管理:操作标签
    2016/01/14开始学习git:标签管理:创建标签
    2016/01/14开始学习git:分支管理:多人协作
    2016/01/14开始学习git:分支管理:Feature分支
    2016/01/13开始学习git:分支管理:Bug分支
    python-pygame的触碰方法
    python游戏pygame模块画圆及鼠标拖拽移动方法介绍
    python的EasyGui模块简单用法介绍
    python用递归函数解汉诺塔游戏
    python函数的几种参数类型
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/8465886.html
Copyright © 2011-2022 走看看