# growth-excel-example **Repository Path**: Hardy_1995_admin/growth-excel-example ## Basic Information - **Project Name**: growth-excel-example - **Description**: growth-excel使用例子 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-03-27 - **Last Updated**: 2024-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # growth-excel-example ### growth-excel功能开发文档 [growth-excel功能开发文档](https://www.yuque.com/qianmozhizhong/gchrkp/by9g9f): https://www.yuque.com/qianmozhizhong/gchrkp/by9g9f ### 交流信息 > _QQ交流群:723291299 🔥_ > _环境:Java8及以上_ > _加群可提前获知更新情况,以及问题讨论_ ### 什么是growth-excel-example? growth-excel 是一个低代码POI框架,它使用 Java 注解 来生成复杂数据报表复杂的Excel 文件,会简单的 JAVA 基础知识即可,不需要懂任何POI,也不需要写繁琐的数据结构 ,配置指定 的注解属性,操作model插入指定的数据,即可生成复杂的Excel报表, 极大减少报表开发工作量, ### 为什么要做 growth-excel ? 对于生成Excel数据报表的人来说,除了现有的封装好的POI插件,对于现有的需求很多无法满 足自己的需求,只能通过自己去既要整理数据,又要将数据整体的结合POI去,做出的功能效果满 足需求,但是维护很痛苦,只有自己做过才知道,因为一个月前只有自己和神知道从哪里改才能追 加需求,一个月后,也就只有神知道这个是什么? 本着优化的态度,尝试过多种方式,如使用抽象工厂的形式,将一些功能特效封装到类里,通过 类继承方法重写的方式,将poi代码分离,但代码都需要固定格式去继承类,本着用最少的代码做 最多的事情,在看完开源项目Erupt后,加上工作同事推荐的easyPOI注解的方式实现,就有了这 个的来源。 零零转转,有些重复造车的节奏,但也只是想优化,精简,以最少的代码实现最多的效果,然后 想将曾经做的所有功能效果统一的做成一个生成复杂报表的插件,只需插入指定的数据类型,既可 以实现任意单元格插入图片,固定规则合并单元格插入图表(柱状图、饼状图、折线图)、字体颜 色、背景颜色等多个效果统一的处理。 也本着开发兴趣娱乐的角度,去想去思考该怎么实现,有许许多多有趣的想法,怎样将一个好不 关联的表格数据组合到一起如继承覆盖方法的方式,主要是将所有的单元格数据,存储到List集合 再通过数据遍历。注解实现后,可延伸的东西太多了,如水平合并单元格,通过数据列追加的方式 (@Excel horizontalMergeNum属性的来源);如Excel表格自带图表统计图,需要表格内的 固定列的数据,未影响美观,动态计算位置,并将字体颜色改变的方式;如单个类生成多个工作薄, 就基本的注解上新建了一个注解,将@Excel不能处理的功能,向下兼容这也是注解@SheetField 的来源,精准定位复杂Excel报表 百分之5的想法,百分之15的建议、百分之60开发、百分之20的测试、技术有限,有问题请勿喷, 如有需要优化的地方,麻烦指出,会在第一时间修复。 ### 功能效果 #### 单工作簿生成报表效果之一 ![result](readme/SheetfieldExcel.png) ### 第一个例子 #### 数据基本类 ``` java package cn.zzhardy.example.common; import java.util.Date; import cn.zzhardy.annotation.Excel; import cn.zzhardy.annotation.Excel.ColumnType; import cn.zzhardy.annotation.Excels; import lombok.Data; @Data public class SysLog { @Excel(name = "日志序号", sort = 1, prompt = "测试") private Integer jobLogId; @Excel(name = "日志信息", sort = 2) private String jobMessage; @Excel(name = "执行状态", valueSubstitution = "0=正常,1=失败", sort = 4, fontColor = "0=#ff0000,1=#66ccff", combo = {"正常", "失败"}) private int status; @Excel(name = "异常信息", sort = 3) private String exceptionInfo; /** 部门对象 */ @Excels({ @Excel(name = "部门名称", sort = 6, targetAttr = "deptName"), @Excel(name = "部门负责人", sort = 7, horizontalMergeNum = 3, targetAttr = "leader", titleBackground = "217,225,242") }) private SysDept dept; @Excel(name = "创建日期", dateFormat = "yyyy-MM-dd", sort = 5) private Date createDate; @Excel(name = "失败报警图片", sort = 8, cellType = ColumnType.IMAGE, titleBackground = "217, 225, 242") private String errorImageUrl; } ``` ``` java package cn.zzhardy.example.common; import lombok.Data; @Data public class SysDept { /** 部门名称 */ private String deptName; /** 负责人 */ private String leader; } ``` #### 测试类 ``` java package cn.zzhardy.example.excelExample; import java.util.ArrayList; import java.util.Date; import java.util.List; import cn.zzhardy.example.common.SysDept; import cn.zzhardy.example.common.SysLog; import cn.zzhardy.utils.poi.ExcelCenter; import cn.zzhardy.utils.poi.utils.UrlUtils; import cn.zzhardy.utils.result.AjaxResult; import org.junit.Test; public class ExcelExample { @Test public void createByExcel() { List list = new ArrayList<>(); for (int i = 0; i < 10; i++) { SysLog sysLog = new SysLog(); sysLog.setExceptionInfo("测试"); sysLog.setJobLogId(i); sysLog.setJobMessage("ce111"); if (i % 2 == 0) { sysLog.setStatus(1); } else { sysLog.setStatus(0); } sysLog.setCreateDate(new Date()); String imageUrl = UrlUtils.projectUrl() + "webapp/images/timg.jpg"; sysLog.setErrorImageUrl(imageUrl); // 部门信息 SysDept sysDept = new SysDept(); sysDept.setDeptName("测试部门" + i); sysDept.setLeader("测试部门领导" + i); sysLog.setDept(sysDept); list.add(sysLog); } ExcelCenter util = new ExcelCenter<>(SysLog.class); AjaxResult form = util.exportExcel(list, "form"); System.out.println(form.toString()); } } ``` #### 生成效果 ![result](readme/excelExample.png) #### 支持功能 可以根据注解@Excel、@Excels、@SheetField对@Excel的工作簿、单元格的进行操作, 已经支持功能: 1. 水平合并单元格 2. 垂直合并单元格 3. 统计图(柱状图、饼状图、折线图) 4. 单元格字体颜色 5. 单元格背景颜色 6. 单元格文字加粗 7. 指定任意单元格插入图片 8. 单个sheet页允许多个功能在同一个工作簿(报表效果) 9. 多工作簿生成以上功能 10. ... #### 计划: 1. 文档完善 2. 组件优化 3. 组件model代码生成器 4. 功能追加 5. 生成报表项目样例