使用Java Annotation写Excel 工具类
package com.excel.export.util; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * * <p>导出excel 工具包</p> * @author liuqing * @version 1.0 * @see 导出excel 注解 * */ @Retention(value=RetentionPolicy.RUNTIME) @Target(value=ElementType.FIELD) public @interface AllowExcel { boolean value() default true; String name(); }
写实现类
package com.excel.export.util; import java.io.Serializable; import java.util.Date; /** * * @author liuqing * @version 1.0 * @datetime 2011-11-24 * @see 学生测试对象 * */ public class Student implements Serializable { private static final long serialVersionUID = -8141916472359874289L; @AllowExcel(name="编号") private Integer id; @AllowExcel(name="姓名") private String name; @AllowExcel(name="生日") private Date date; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
POI 实现类
package com.cxxx.common; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; /** * * @author LiuQing * @see excel 导出工具类 * 使用方法 * class EntityObjectClass { * * @AllowExcel(name="姓名") * private String name; * * @AllowExcel(name="生日") * private Date birthday * * } * * ExportExcel<EntityObjectClass> export = new ExportExcel<EntityObjectClass>(); * List<EntityObjectClass> data = new ArrayList<EntityObjectClass>(); * InputStream inputStream = export.createExcel(data); * * @version 1.0 * @datetime 2011-11-24 * */ public class ExportExcel<T extends Serializable> { /** * 定义Excel hander */ private Workbook excelHander = new HSSFWorkbook(); /** * 生成sheet 名称 */ private String sheetName = "sName"; private boolean showHeader = true; private Collection<T> tempData = new ArrayList<T>(); private boolean isFirst = true; /** * 缓存成员变量 */ private List<String> fieldNameCaches = new ArrayList<String>(); /** * @see 生成Excel 文件 * @param data * @return * @throws IllegalAccessException */ public InputStream createExcel(Collection<T> data) throws Exception { this.tempData = data; this.createHeader(data); return this.getInputStream(); } public void addDate(T t) throws Exception { this.tempData.add(t); } /** * * @return * @throws Exception */ public InputStream createExcel() throws Exception { this.createHeader(this.tempData); return this.getInputStream(); } /** * 创建器 * @param data * @throws IllegalAccessException */ private void createHeader(Collection<T> data) throws Exception { //Sheet 创建工作表 Sheet sheet = excelHander.createSheet(sheetName); int j = 0; for (T t:data) { Field[] fields = t.getClass().getDeclaredFields(); /** * 加入允许字段缓存数据 * if == 0时表示要添加缓存数据 */ if (j == 0) { Row headRow = null; if (this.showHeader) { headRow = sheet.createRow(0); } int i = 0; for (Field field:fields) { //判断Excel 安全允许注解 AllowExcel allowExcel = field.getAnnotation(AllowExcel.class); if (allowExcel != null && allowExcel.value()) { //显示关部信息 if (this.showHeader) { Cell cell = headRow.createCell(i); cell.setCellValue(allowExcel.name()); i++; } this.fieldNameCaches.add(field.getName()); } } j++; } //创建产生行数据 Row hssfRow = sheet.createRow(j); this.setCellValueToRow(t, hssfRow); j++; } } /** * 输出Excel Row 信息 * @param t T extends Serializable * @param hssfRow HSSFRow * @return HSSFRow * @throws IllegalAccessException * @throws NoSuchMethodException * @throws SecurityException */ public Row setCellValueToRow(T t,Row hssfRow) throws Exception { Class clazz = t.getClass(); Field fields[] = clazz.getDeclaredFields(); //定义Excel 输出行数 int i = 0; for (Field field:fields) { //缓存中是否存在允许字段 if (this.isCacheFiledName(field.getName())) { Cell cell = hssfRow.createCell(i); i++; field.setAccessible(true); Class clazzType = field.getType(); String methodName = ""; if (clazzType.getName().equals("boolean") || clazzType.getName().equals("java.lang.Boolean")) { methodName = "is" + this.toFirstToUp(field.getName()); } else { methodName = "get" + this.toFirstToUp(field.getName()); } Object obj = clazz.getMethod(methodName, null).invoke(t, null); //Object obj = clazz.getDeclaredMethod(methodName, null).invoke(t, null); //类型转换 if (obj instanceof Integer ) { cell.setCellValue((Integer)obj); } else if (obj instanceof String) { cell.setCellValue((String)obj); } else if (obj instanceof Date) { cell.setCellValue((Date)obj); } else if (obj instanceof Double) { cell.setCellValue((Double)obj); } else if (obj instanceof Boolean) { cell.setCellValue((Boolean)obj); } else if (obj instanceof Float) { cell.setCellValue((Float)obj); } else if (obj instanceof Long) { cell.setCellValue((Long)obj); } else { System.out.println(obj); //throw new TypeNotPresentException("类型不支持", null); } } } return hssfRow; } /** * 判断Cache 是否有对应的FiledName * @param fieldName String * @return boolean */ private boolean isCacheFiledName(String fieldName) { if (fieldName == null) { return false; } for (String fieldNameCache:this.fieldNameCaches) { if (fieldName.equals(fieldNameCache)) { return true; } } return false; } /** * 获得输入流 * @return InputStream */ private InputStream getInputStream() { ByteArrayOutputStream output = new ByteArrayOutputStream(); InputStream inputStream = null; try { this.excelHander.write(output); byte b[] = output.toByteArray(); inputStream = new ByteArrayInputStream(b); } catch (IOException e) { e.printStackTrace(); } finally { try { output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } } return inputStream; } /** * 查找对应的类自定义方法 * @param methodName * @return boolean */ public boolean isClassMethodName(String methodName) { if (methodName != null) { if ("getClass".equals(methodName)) { return false; } if (methodName.startsWith("get") || methodName.startsWith("is") || methodName.startsWith("set")) { return true; } return false; } return false; } /** * * @param str * @return String */ public static String toFirstToLower(String str) { char chars[] = str.toCharArray(); if (chars != null && chars.length > 0) { if (chars[0] > 'A') { chars[0] = (char) (chars[0] + 32); } } return new String(chars); } /** * 首字母转为大写 * @param str String * @return String */ public static String toFirstToUp(String str) { char chars[] = str.toCharArray(); if (chars != null && chars.length > 0) { if (chars[0] >= 'a') { chars[0] = (char) (chars[0] - 32); } } return new String(chars); } }
相关推荐
平原型生活垃圾填埋场扩容措施研究及应用_刘志刚.pdf
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
Wallpaper Engine 是一款广受欢迎的动态壁纸软件,允许用户将各种动态、交互式壁纸应用到桌面上。其丰富的创意工坊内容让用户可以轻松下载和分享个性化的壁纸。而“一键提取”功能则是 Wallpaper Engine 中一个非常实用的工具,能够帮助用户快速提取和保存壁纸资源,方便后续使用或分享。
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
这是一份非常有意义的实习报告
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
爱华AIWA HS-J9磁带随身听维修服务手册 说明书电路原理图PCB图
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
房屋租赁合同[示范文本].doc
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
单片机 入门学习视频教程 自学资料
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
auto_gptq-0.5.1.tar.gz
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
结构体 struct关键字用来定义结构体