EasyPoi教程 V1.0
文档
1. 前传
1.1 前言
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员
就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板
语言(熟悉的表达式语法),完成以前复杂的写法
官网:http://www.afterturn.cn/
邮箱: qrb.jueyue@gmail.com
QQ群: 364192721
不如poi那么自定义,不如jxl那么多标签,但是我们就是写的少,写的少
EasyPoi的主要特点
1.设计精巧,使用简单
2.接口丰富,扩展简单
3.默认值多,write less do more
4.spring mvc支持,web导出可以简单明了
功能
Excel自适应xls和xlsx两种格式,word只支持docx模式
1.Excel导入
• 注解导入
• Map导入
• 大数据量导入sax模式
• 导入文件保存
• 文件校验
• 字段校验
2.Excel导出
• 注解导出
• 模板导出
• html导出
3.Excel转html
4.word导出
5.pdf导出
1.2 Easypoi介绍
Easypoi 为谁而开发
• 不太熟悉poi的
• 不想写太多重复太多的
• 只是简单的导入导出的
• 喜欢使用模板的
都可以使用easypoi
Easypoi的目标是什么
Easypoi的目标不是替代poi,而是让一个不懂导入导出的快速使用poi完成Excel和word的各种操作
,而不是看很多api才可以完成这样工作
为什么会写Easypoi
以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业
务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我写了大量的
poi代码,每次都是大量的篇幅,copy to copy,无聊的一逼,然后加入了jeecg,jeecg中有一个小的工具
类,虽然我也不知道是谁写的,然是可以用注解搞定最简单的导出,突然豁然开朗,我可以完善,让我从报
表的苦海当中脱离出来,这样我花了一周的时间做了第一个版本支持导入导出放到了jeecg,发现还是
不错的,慢慢的用的人越来越多,我就把这块独立出来了,再然后有人提出了模板,然后就加入了模板功
能,提出了word的需求,加入了word的功能,后来工作忙了虽然没再参与jeecg,但还是一直维持这
easypoi的更新,根据见识的增长也不断的重构这代码,直到现在
独特的功能
• 基于注解的导入导出,修改注解就可以修改Excel
• 支持常用的样式自定义
• 基于map可以灵活定义的表头字段
• 支持一堆多的导出,导入
• 支持模板的导出,一些常见的标签,自定义标签
• 支持HTML/Excel转换,如果模板还不能满足用户的变态需求,请用这个功能
• 支持word的导出,支持图片,Excel
小白如何开始
• 下载demo运行看看,基本上常见的用用法都在里面easypoi-
test(https://gitee.com/lemur/easypoi-test)
• 查看几个*Util的用法,Easypoi的主要输出就是这个
• 看看注解的意思
• 看看模板的标签用法
• 可以出师了
1.3 使用
• 1.easypoi 父包--作用大家都懂得
• 2.easypoi-annotation 基础注解包,作用与实体对象上,拆分后方便maven多工程的依赖管理
• 3.easypoi-base 导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能
• 4.easypoi-web 耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能
• 5.sax 导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-
scratchpad,都作为可选包了
如果不使用spring mvc的便捷福利,直接引入easypoi-base 就可以了,easypoi-annotation
如果使用maven,请使用如下坐标
如果没有maven请直接下jar,在alimaven(http://maven.aliyun.com/nexus/#nexus-
search;quick~easypoi)
1.4 测试项目
测试这个事情真不是个容易的事情
测试项目包括两块 Junit 的常见测试和spring 的view测试
1.spring view测试
运行application就可以了,访问界面,然后看到界面
图片地址:https://static.oschina.net/uploads/img/201710/10230428_pMr5.png
对应的代码在view下面
2.Junit的测试目录结构如下
• tohtml html预览测试
• view 导出的view测试
• cache 自定义缓存测试
• html html互转测试
• test
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
• excel
• read 读取Excel测试
• check 导入检查测试
• hanlder 导入数据处理
• img 含图片导入测试
• styler 导出样式自定义测试
• template 模板导出测试
• sum 导出含统计测试
• test 导出测试
• groupname groupname 属性测试
• img 导出图片测试
• pdf pdf测试
• word word导出测试
• util util 内部测试
目前的测试覆盖率
图片地址:https://static.oschina.net/uploads/img/201710/10230945_d2rq.png
1.5 可能存在的小坑
缓存问题
缓存问题好像是很多童鞋都遇到的问题,可能是我设计的逻辑问题,但是一直没有好的解决,
但是我也给了一个无奈的解决方案,大家可以自己实现接口IFileLoader
来自己获取自己的文件,用来解决文件获取不到的问题
设置提供了两种方案,都是POICacheManager 的静态方法
public interface IFileLoader {
/**
* 可以自定义KEY的作用
* @param key
* @return
*/
public byte[] getFile(String key);
}
public static void setFileLoder(IFileLoader fileLoder) {
POICacheManager.fileLoder = fileLoder;
}
第一个是全局替换,可以在项目启动的时候,设置下就可以了,第一个是当前线程有效,希望可以
帮助大家解决问题,我再研究下更通用的文件获取,或者那位朋友提供下自己的通用方案。
2. Excel 注解版
2.1 Excel导入导出
Excel的导入导出是Easypoi的核心功能,前期基本也是围绕这个打造的,主要分为三种方式的处理,其
中模板和Html目前只支持导出,因为支持Map.class其实导入应该是怎样都支持的
• 注解方式,注解变种方式
• 模板方式
• Html方式
下面分别就这三种方式进行讲解
2.2 注解
注解介绍
easypoi起因就是Excel的导入导出,最初的模板是实体和Excel的对应,model--row,filed--col 这样利
用注解我们可以和容易做到excel到导入导出
经过一段时间发展,现在注解有5个类分别是
• @Excel 作用到filed上面,是对Excel一列的一个描述
• @ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以
用集合表示
• @ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里
面同样有导出的字段
• @ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出
• @ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导
出做出不同处理
注解中的ID的用法
/**
* 一次线程有效
* @param fileLoder
*/
public static void setFileLoderOnce(IFileLoader fileLoder) {
if (fileLoder != null) {
LOCAL_FILELOADER.set(fileLoder);
}
}