用groovy简化java反射编写一个基于行数据对象的自动生成excel文件对象的工具
来源:互联网 发布:数据的存储方法 编辑:程序博客网 时间:2024/05/16 12:42
本人对该项目生成excel对象的效率非常不满,大家如果有好的建议可以提出来,项目已经上传至github:https://github.com/dacongxiaocong/groovy_create_excel.git
首先贴上maven依赖
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> <version>2.4.5</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version></dependency>用到了groovy和poi
接下来添上项目目录:
下面就是源码啦~
插入行数据的工具类:
package com.xjc.createexcel.Utilimport org.apache.poi.hssf.usermodel.HSSFCellimport org.apache.poi.hssf.usermodel.HSSFRowimport java.lang.reflect.Fieldclass FillObjectIntoRow<T> { //向行中填入数据,数据顺序由list决定 void fill(T t,HSSFRow row,List<String> class_titles){ //获取行数据类对象的class对象 Class<T> tClass = t.class //通过反射获取所有全局属性 Field[] fields = tClass.declaredFields int cellNum = 0 //遍历list,通过list的顺序决定行数据的顺序 for (class_title in class_titles){ //遍历类中的属性 fields.each {field -> if (field.name.equals(class_title)){ //groovy对抽象的简化,可以获得对象同名属性的值 String value = t."$field.name" //获取单元格对象 HSSFCell cell = row.createCell(cellNum) //将值填入单元格中 cell.setCellValue(value) } } cellNum++ } }}生成excel文件对象的类:
package com.xjc.createexcelimport com.xjc.createexcel.Util.FillObjectIntoRowimport org.apache.poi.hssf.usermodel.HSSFCellimport org.apache.poi.hssf.usermodel.HSSFRowimport org.apache.poi.hssf.usermodel.HSSFSheetimport org.apache.poi.hssf.usermodel.HSSFWorkbookclass CreateWithHeadMapAndList<T> { //groovy支持在方法定义时设置默认属性值,LinkedHashMap可以保证放入数据的顺序,通过map设置标题与类中全局变量的对应关系和数据列顺序,List为需要插入的行对象,T为行对象类 HSSFWorkbook create(LinkedHashMap<String,String> heads,List<T> objects,String sheetName = "default"){ //获取workbook对象 HSSFWorkbook workbook = new HSSFWorkbook() //获取sheet对象 HSSFSheet sheet = workbook.createSheet(sheetName) //获取标题行对象 HSSFRow headRow = sheet.createRow(0) //获取行对象插入工具类 FillObjectIntoRow<T> fillObject = new FillObjectIntoRow<>() int headCellNum = 0 int bodyRowNum = 1 //通过map获取这个list,这个list的作用是保证列数据顺序是用户在map中设置的顺序 List<String> class_titles= new ArrayList<>() //插入标题 for (head in heads){ String title = head.key String class_title = head.value HSSFCell cell = headRow.createCell(headCellNum) cell.setCellValue(title) class_titles<<class_title headCellNum++ } //填入行数据 for (object in objects){ HSSFRow bodyRow = sheet.createRow(bodyRowNum) fillObject.fill(object,bodyRow,class_titles) bodyRowNum++ } return workbook }}接下来是演示如何使用
行数据对象类:
package com.xjc;public class Car { private int id; private String name; private String factory; public String getFactory() { return factory; } public void setFactory(String factory) { this.factory = factory; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}演示使用(应为是用linux系统所以路径有点怪):
package com.xjc;import com.xjc.createexcel.CreateWithHeadMapAndList;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;import java.util.*;public class Test { public static void main(String[] args) throws IOException { CreateWithHeadMapAndList<Car>createMod = new CreateWithHeadMapAndList<>(); List<Car>list = new ArrayList<>(); for (int i=0;i<5;i++){ Car car = new Car(); car.setId(i); car.setName("car-"+i); car.setFactory("factory-"+i); list.add(car); } LinkedHashMap<String,String>map = new LinkedHashMap<>(); map.put("编号","id"); map.put("车名","name"); map.put("厂名","factory"); HSSFWorkbook workbook = createMod.create(map,list); FileOutputStream fops = new FileOutputStream("/opt/test.xls"); workbook.write(fops); }}生成的excel文件:
阅读全文
0 0
- 用groovy简化java反射编写一个基于行数据对象的自动生成excel文件对象的工具
- 使用Java泛型和反射机制编写Excel文件生成和解析的通用工具类
- 一个来将返回的 JSON 数据自动生成 Java 对象的工具
- Groovy探索之对Java语言反射的简化
- Excel Report 一个小巧实用基于java实现的Excel报表生成工具
- 使用java反射实现对象工厂以及工具类的编写
- Java反射取得一个对象的信息
- 基于腾讯COS对象存储SDK使用Python编写的文件上传工具第二版
- java 反射的应用(将一个java对象转换成一个xml文件)
- 利用Java的反射机制解析一个Class对象的详细内容(工具方法留用)
- 编写一个基于对象的程序,求长方形的体积
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象[修订081217]
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 一个自己编写的xml和JAVA对象之间的转换工具,xml和对象轻松转换(simple-xml2object)
- 编写一个自动编译class文件的工具
- 已知一个对象,用反射的方式复制另一个对象
- java 自己写的一个自动分析对象的mysql数据库操作工具
- java反射(二)-基于反射和注解的Excel解析工具Demo
- android studio启动时报错:Unable to create Debug Bridge
- Java程序内存分析:使用mat工具分析内存占用
- 从遗传算法、粒子群算法、模拟退火算法理解启发式算法优化的本质
- Android 多图选择上传
- Ubuntu下Samba服务器安装和配置
- 用groovy简化java反射编写一个基于行数据对象的自动生成excel文件对象的工具
- idea里gulp-sass下载失败解决方案
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 文件上传和下载
- 10
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
- #if define #if !define #elif defined
- weblogic配置sqlserver数据源
- C#中@的用法总结