java反射工具类的实现代码(Excel导出)
程序员文章站
2022-04-04 08:14:46
...
本篇文章给大家带来的内容是关于java反射工具类的实现代码(Excel导出),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、定义注解,用于vo类中标记使用到的属性
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @author fc * @date 2018-09-18 */ @Target(value = {ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Allow { String title() default "undefined"; }
二、反射工具类
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; /** * @author fc * @date 2018-09-18 * @msg 反射工具类 * @tips 字段必须使用@Allow注解 title属性定义标题 */ public class ExcelCreateUtil { /** * * @param o object是vo类 * @param suf 返回的excel文件后缀 * @return * @throws Exception */ public static Workbook createWorkBook(List<Object> o,ReturnSuf suf) throws Exception { //定义一个新的工作簿 Workbook wb = suf.getValue().equals(ReturnSuf.XLSX.getValue())?new XSSFWorkbook():new HSSFWorkbook(); //创建sheet Sheet sheet = wb.createSheet(String.valueOf(System.currentTimeMillis())); //创建行 Row row = sheet.createRow(0); //第一行以注解@Allow title属性命名 Class<?> aClass = o.get(0).getClass(); Field[] fields1 = aClass.getDeclaredFields(); int bj2 = 0; for (int j = 0; j < fields1.length; j++) { Allow annotation = fields1[j].getAnnotation(Allow.class); if (annotation != null) { fields1[j].setAccessible(true); row.createCell(bj2).setCellValue(annotation.title()); bj2++; } } int bj1 = 1; for (int i = 0; i < o.size(); i++) { //获取当前对象 Object o1 = o.get(i); //获取当前类类型 Class<?> c = o.get(i).getClass(); //获取当前类类型的所有属性 Field[] fields = c.getDeclaredFields(); //创建行-从第二行起 Row row1 = sheet.createRow(bj1); bj1++; int bj = 0; for (int j = 0; j < fields.length; j++) { Allow annotation = fields1[j].getAnnotation(Allow.class); if (annotation != null) { fields[j].setAccessible(true); //得到属性名 String name = fields[j].getName(); //获取属性对应的get方法 Method method = c.getDeclaredMethod(toGet(name)); Object invoke = method.invoke(o1); String value = invoke == null ? "" : invoke.toString(); //赋值 row1.createCell(bj).setCellValue(value); bj++; } } } return wb; } //获取属性的set方法 public static String toSet(String s) { final String SET = "set"; if (Character.isUpperCase(s.charAt(0))) { return SET + s; } else { return SET + (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString(); } } //获取属性的get方法 public static String toGet(String s) { final String GET = "get"; if (Character.isUpperCase(s.charAt(0))) { return GET + s; } else { return GET + (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString(); } } public enum ReturnSuf { XLS(".xls后缀", ".xls"), /** *大数据量建议使用.xlsx */ XLSX(".xlsx后缀", ".xlsx"),; private String key; private String value; ReturnSuf(String key, String value) { this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } }
以上就是java反射工具类的实现代码(Excel导出)的详细内容,更多请关注其它相关文章!
下一篇: 深入了解Angularjs中的视图和指令
推荐阅读
-
vue中导出Excel表格的实现代码
-
[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的
-
java实现导出文字+数据的excel文件并返回文件流
-
java继承:定义交通工具类Vehicle,一个小车类Car,一个公共汽车Bus类,实现Car、Bus对Vehicle的继承
-
java反射构建excel导出工具类
-
如何利用反射批量修改java类某一属性的代码详解
-
java使用POI实现excel文件的导入和导出(通用方法)
-
Java和.Net版通用工具类实现--生成自定义Web Html/Excel测试用例和测试报告
-
通过自定义注解+反射的形式,使用POI实现excel的导入导出
-
工具类+静态代码实现Hibernate的配置 hibernate