@excel注解_EasyPOI 详细教程以及注解的使用

Easypoi是一个简化使用Apache POI的工具,专注于Excel和Word的导入导出。它通过注解实现Excel与Java对象的映射,简化了Excel处理的复杂性。本文介绍了Easypoi的基本概念、目标、功能以及如何使用注解进行实战操作,展示了其在处理Excel样式和数据转换方面的便利性。
摘要由CSDN通过智能技术生成

因为项目的原因需要用到POI来操作Excel 文档,以前都是直接使用POI来操作的,但是最近听到easypoi的存在,所以自己简单的尝试了下!别说,他还真的挺好用的!

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

使用

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,请使用如下坐标

<dependency>            <groupId>cn.afterturngroupId>            <artifactId>easypoi-baseartifactId>            <version>3.1.0version>        dependency>        <dependency>            <groupId>cn.afterturngroupId>            <artifactId>easypoi-webartifactId>            <version>3.1.0version>        dependency>        <dependency>            <groupId>cn.afterturngroupId>            <artifactId>easypoi-annotationartifactId>            <version>3.1.0version>        dependency>

注解

注解介绍

easypoi起因就是Excel的导入导出,最初的模板是实体和Excel的对应,model–row,filed–col 这样利用注解我们可以和容易做到excel到导入导出 经过一段时间发展,现在注解有5个类分别是

@Excel 作用到filed上面,是对Excel一列的一个描述

@ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示

@ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段

@ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出

@ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理

@Excel

这个是必须使用的注解,如果需求简单只使用这一个注解也是可以的,涵盖了常用的Excel需求,需要大家熟悉这个功能,主要分为基础,图片处理,时间处理,合并处理几块,name_id是上面讲的id用法,这里就不累言了

2ed3bae4aa4c3b3b2ab9c03098439d3a.png

@ExcelTarget限定一个到处实体的注解,以及一些通用设置,作用于最外面的实体

359325598f751427ed5ee5ac27fc8f5e.png

@ExcelEntity标记是不是导出excel 标记为实体类,一遍是一个内部属性类,标记是否继续穿透,可以自定义内部id

c74df9b2b5fcef191c243a0089d9e99d.png

@ExcelCollection一对多的集合注解,用以标记集合是否被数据以及集合的整体排序

3b8f9d35fedb2d8891039542399b77bd.png

@ExcelIgnore

忽略这个属性,多使用需循环引用中,无需多解释吧^^

实战

首先是实体类:

public class StudentEntity implements java.io.Serializable {    /**     * id     */    private String        id;    /**     * 学生姓名     */    @Excel(name = "学生姓名", height = 20, width = 30, isImportField = "true_st")    private String        name;    /**     * 学生性别     */    @Excel(name = "学生性别", replace = { "男_1", "女_2" }, suffix = "生", isImportField = "true_st")    private int           sex;    @Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd", isImportField = "true_st", width = 20)    private Date          birthday;    @Excel(name = "进校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd")    private Date registrationDate; }

这里设置我们的4列分别是学生姓名,学生性别,出生日期,进校日期

其中学生姓名定义了我们的列的行高,学生性别因为我们基本上都是存在数据库都是数字所以我们转换下,两个日期我们都是进行了格式化输出了,这样我们就完成了业务对我们Excel的样式需求,后面只有把这个学生列表输出就可以了

生成Excel代码如下

 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("计算机一班学生","学生"),            StudentEntity .class, list);

这样我们就得到的一个java中的Excel,然后把这个输出就得到我们的Excel了

c271ef6dd634cc527c0169e7948f3694.png

就此,easypoi 的工作就完成了,是不是很简单

知识就是要不断的学习,不断的复习,这样的才能记忆的更加深刻。加油,美好的风景一直在路上。

手写不易,觉得文章不错可以关注我一起学习!

自己封装的excel导出/导入,可以根据注解导出excel.本项目一共有13个类,里面还包含了一个反射工具,一个编码工具,10分值了。下面是测试代码 public class Test { public static void main(String[] arg) throws FileNotFoundException, IOException{ testBean(); testMap(); } public static void testBean() throws FileNotFoundException, IOException{ List l = new ArrayList(); for(int i=0;i<100;i++){ l.add(new MyBean()); } //很轻松,只需要二句话就能导出excel BeanExport be = ExportExcel.BeanExport(MyBean.class); be.createBeanSheet("1月份", "1月份人员信息").addData(l); be.createBeanSheet("2月份","2月份人员信息").addData(l); be.writeFile("E:/test/bean人员信息8.xlsx"); } //如果不想用注解,还能根据MAP导出. public static void testMap () throws FileNotFoundException, IOException{ List l = new ArrayList(); l.add(new MapHeader("姓名","name",5000)); l.add(new MapHeader("年龄","age",4000)); l.add(new MapHeader("生日","birthdate",3000)); l.add(new MapHeader("地址","address",5000)); l.add(new MapHeader("双精度","d",4000)); l.add(new MapHeader("float","f",6000)); List<Map> lm = new ArrayList<Map>(); for(int i=0;i<100;i++){ Map map = new HashMap(); map.put("name","闪电球"); map.put("age",100); map.put("birthdate",new Date()); map.put("address","北京市广东省AAA号123楼!"); map.put("d",22.222d); map.put("f",295.22f); lm.add(map); } MapExport me = ExportExcel.mapExport(l); me.createMapSheel("1月份","广东省人员信息").addData(lm); me.createMapSheel("2月份", "北京市人员信息").addData(lm); me.writeFile("E:/test/map人员信息9.xlsx"); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值