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
以上代码如有问题,欢迎大佬们下方留言
Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)的更多相关文章
- Java中字节与对象之间的转换
近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOu ...
- Java开发学习--Java 中基本类型和包装类之间的转换
Java 中基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之 ...
- java中对集合对象list的几种循环访问
java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static void main(String[] args) { List<String> li ...
- Java中的函数对象
初次听说java中的函数对象可能,比较的陌生.可以类比着来理解一下,人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把 ...
- Java 中基本类型和字符串之间的转换
Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...
- (转)java中对集合对象list的几种循环访问总结
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...
- 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 ...
- java中Integer 和String 之间的转换
java中Integer 和String 之间的转换 将数组转换成字符串:char[] array = {'a','b','c','d','e'};String str = new String(ar ...
- Java中创建实例化对象的几种方式
Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...
随机推荐
- 小白的Python之路 day5 configparser模块的特点和用法
configparser模块的特点和用法 一.概述 主要用于生成和修改常见配置文件,当前模块的名称在 python 3.x 版本中变更为 configparser.在python2.x版本中为Conf ...
- 地图API地址 百度地图开放平台
http://lbsyun.baidu.com/index.php?title=jspopular
- 织梦CMS首页调用分类信息栏目及列表方法
不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlelen='24' orderby='pubdate' channel ...
- 免费空间上的mysql数据库怎么连接?
我申请了一个php的免费空间,空间有带mysql数据库,可是我不知道怎么连接. 平时在本地做php时我都是怎么连接的 可是现在到空间上了我就不知道怎么连接了.空间有提供phpmyadmin 会的教一下 ...
- WPF与Win32互操作
一.WPF如何使用HWND 当您创建WPF Window时,WPF会创建顶级HWND,并使用HwndSource将Window及其WPF内容放入HWND中.应用程序中其余的WPF内容共享此单个HWND ...
- Spring+redis整合遇到的问题集以及注意事项
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...
- python_将多个小字符拼接成大字符?
案例: 下面有一个列表,如何把这个列表拼接成一个字符串? l = [1, 2, 3, 4, 'a', 'b', 'c'] 有哪些方法? 方法1: for进行迭代拼接 #!/usr/bin/python ...
- Linux几个小杂碎点(更新中)
1 BIOS时间和系统时间问题 安装完CentOS后,系统时间是CST时间,而BIOS时间是UTC时间,因此系统时间会比BIOS时间快8个小时.如果您设置BIOS自动开机的话,就会总是差个8小时.需要 ...
- 比较Maven和Ant
从今天开始,整理maven一系列. Maven 它是什么? 如何回答这个问题要看你怎么看这个问题. 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可 ...