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().(工厂方法涉及到框架)③动用 ...
随机推荐
- 算法,java代码实现打印万年历
万年历 以1900年1月1号星期一为时间原点 星期日 第一天 星期一 第二天 星期二 第三天 星期三 第四天 星期四 第五天 星期五 第六天 星期六 第七天 1.计算出当前日 ...
- java中类的加载过程和对象的创建过程
1.类加载过程 首先,jvm在执行时,遇到一个新的类,会先去内存的方法区中去寻找该类的.class文件,如果找到了就直接运行,如果没有找到,则会去硬盘中去寻找该类的.class文件,并将该类文件加载到 ...
- dig(域信息搜索器)命令
dig命令 dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常. 语法 dig(选项)(参数) 选项 @<服务器地址>:指定进行域名解析的域名服务器: -b<ip地 ...
- 通过Xshell如何从Linux服务器下载文件(亲测可行)
到网上下载lrzsz安装包,这里以lrzsz-0.12.20.tar.gz为例 2 打开终端 cd 到安装包所在目录 tar zxvf lrzsz-0.12.20.tar.gz 解压安装包 3 进入解 ...
- [转载]织梦CMS首页调用分类信息栏目及列表方法
原文地址:织梦CMS首页调用分类信息栏目及列表方法作者:小武哥 不懂代码,搜索学习一晚上,都是说调用特定栏目分类信息列表的,用这个代码 {dede:arclistsg row='10' titlele ...
- @synchronized(self)
@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其 它线程访问,起到线程的保护 ...
- spring问题:java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive
问题描述: spring的:java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive 解决方案: 缺少jar ...
- Schema与数据类型优化
良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询数据来设计schema,这往往需要权衡各种因素. MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要. 更小的通 ...
- 2017-07-05 (whereis which find)
whereis whereis 命令名 作用 搜索命令所在的路径以及帮助文档所在的位置 选项 -b 搜索命令所在的位置 -m 搜索帮助文档所在的位置 例子 whereis ls 查看ls命令所在的位 ...
- android dialog弹出的情况下监听返回键
view = LayoutInflater.from(getActivity()).inflate( R.layout.dialog_tips, null); title2 = (TextView) ...