通用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

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

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

  1. Java中字节与对象之间的转换

    近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...

  2. Java开发学习--Java 中基本类型和包装类之间的转换

    Java 中基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之 ...

  3. java中对集合对象list的几种循环访问

    java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static void main(String[] args) { List<String> li ...

  4. Java中的函数对象

    初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...

  5. Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  6. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...

  7. Java中excel转换为jpg/png图片 采用aspose-cells-18.6.jar

    一  Java中excel转换为jpg/png图片 package com.thinkgem.jeesite.modules.task.util; import com.aspose.cells.Im ...

  8. java中Integer 和String 之间的转换

    java中Integer 和String 之间的转换 将数组转换成字符串:char[] array = {'a','b','c','d','e'};String str = new String(ar ...

  9. Java中创建实例化对象的几种方式

    Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...

随机推荐

  1. Nginx的启动(start),停止(stop)命令

    http://blog.csdn.net/u010739551/article/details/51654859 查看Nginx的版本号:nginx -V 启动Nginx:start nginx 快速 ...

  2. DEDECMS系统安全篇之移data目录到Web根目录以外听语音

    http://jingyan.baidu.com/article/ad310e80aeb0971849f49e8e.html 主要三个步骤: 1./include/common.inc.php 2.还 ...

  3. 您是不是奇怪为什么 <script> 标签中没有 type="text/javascript" 属性?

    在 HTML5 中该属性不是必需的.JavaScript 是 HTML5 以及所有现代浏览器中的默认脚本语言!

  4. VIM 自定义语法高亮配置

    VIM 没有自动支持语法高亮,自己动手搞一搞,网上查了一堆资料,终于配置成功, 记录一下,以便后期查看. 总共两步: step1 : 定义语法规则 1)需要创建一个定义语法规则的文件,这个 actio ...

  5. xml报错 Parse Fatal Error :在实体引用中,实体名称必须紧跟在'&'后面

    修改jndi配置文件中的密码后,重启tomcat报错如下  实际问题是xml中默认’&’是非法字符,用     &   替代

  6. 未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity匹配的导出的解决办法

    未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity Micros ...

  7. springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

  8. Spark 读写hive 表

    spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...

  9. grails项目数据源配置

    grails项目数据源配置 mysql: driverClassName : com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/mysql ...

  10. 【nginx】nginx解决跨域详解

    使用场景:本地运行一个项目,但是要访问外域的api接口,存在跨域问题,解决方式有很多,但我尝试用nginx解决,搜索了网上文章后再加上尝试终于成功, 其中一些注意事项和大家分享一下. 一.window ...