使用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); } }
相关推荐
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)。在Java环境中,它提供了一个强大的API,使得开发者能够读取、写入和操作这些文档。在给定的...
在实际应用中,"org.apache.poi.xwpf.converter-0.9.8.jar"通常会与其他Apache POI库一起使用,如"HSSF"(处理旧版Excel .xls文件)和"XSSF"(处理新式Excel .xlsx文件)。开发者需要在他们的Java项目中引入这个JAR...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)。在Java环境中,它提供了一组API,使得开发者能够读取、写入以及操作这些文件。"org....
以上就是一个简单的Java使用POI 3.10导出Excel的例子。实际应用中,你可能需要处理更复杂的数据结构,如循环创建多行多列,读取数据源填充内容,设置自定义样式等。同时,为了提高性能,可以考虑使用SXSSFWorkbook...
本篇文章将深入讲解如何使用POI库在Java中实现Excel的导出功能,以及涉及到的相关jar包及其作用。 首先,`poi-ooxml-schemas-3.15-beta1.jar`是POI库中的XML schema定义,用于解析和创建符合Office Open XML标准的...
总的来说,Apache POI 3.9 jar包是一个强大的Java库,用于处理Excel文件。通过熟练掌握其API,开发者可以轻松地实现与Excel文件的交互,从而满足各种业务需求。不过,需要注意的是,处理大型Excel文件时,由于内存...
这个"org.apache.poi"依赖包是Java开发者在处理这些文件时不可或缺的工具。它提供了丰富的API,使得在Java环境中读取、写入和操作Office文档变得轻而易举。 Apache POI 3.17 版本是该项目的一个稳定版本,包含了...
总之,Apache POI的jar包为你提供了在Java中操作Excel的强大能力,无论是导出数据,还是进行数据分析,都能得心应手。不过需要注意的是,由于Apache POI处理的文件格式复杂,可能会消耗较多的内存,因此在处理大量...
在Java开发环境中,Apache POI提供了 poi.jar 包,它是进行Excel数据读取和写入的核心库。本篇文章将详细介绍如何利用poi.jar包来高效地处理Excel数据。 1. **Apache POI介绍** Apache POI 是一个开放源代码的Java...
在Java web开发中,导出Excel表格是一项常见的需求,例如为了...通过上述知识点,开发者可以利用Java和Apache POI库轻松实现Web应用程序中Excel文件的导出功能,同时结合实际需求进行优化,提高用户体验和系统性能。
导入这些jar包后,开发者可以使用Apache POI API创建、修改和读取Office文件。例如,可以创建新的Excel工作簿,添加工作表,插入公式,设置单元格样式,读取数据,甚至处理图表和图片。对于Word文档,可以添加文本、...
【标题】"poi.jar导入导出jar包"指的是Apache POI项目提供的Java库,主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个jar包是开发人员在Java环境中进行读写Excel文档时必不可少的工具。 ...
综上所述,Apache POI.jar包是Java开发中处理Microsoft Office文件不可或缺的工具,无论是在数据处理、报告生成还是文件转换等方面,都能提供强大且灵活的支持。使用poi-4.1.2版本,开发者可以利用最新的功能和改进...
总的来说,Apache POI 3.16 JAR包为Java开发者提供了强大且灵活的工具,用于处理Excel文件。无论是在数据导入导出、报表生成还是自动化任务中,它都是一个不可或缺的库。通过理解和熟练使用其API,开发者可以构建出...
这里的"poi 的jar 包"指的是Apache POI项目的相关jar文件,这些jar文件是开发人员在Java环境中使用POI库时需要引入的依赖。 1. **poi-3.0.1-FINAL-20070705.jar**:这是Apache POI的核心库,包含了处理Excel(HSSF...
本篇文章将详细探讨使用Apache POI读取Excel文件所需的jar包,以及如何在Java项目中集成和使用这些库。 首先,Apache POI的核心jar包是poi-ooxml-schemas和poi-ooxml。这两个jar包提供了对Excel文件的XML Schema...
本篇文章将详细探讨使用Apache POI库通过Java导出Excel所需的三个关键JAR包。 首先,我们来了解Apache POI项目。它是一个开源项目,主要由Apache软件基金会维护,其目标是提供一套API,使得开发者可以使用Java处理...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个"poi.jar资源"包含的是Apache POI的核心组件,版本为3.16,能够帮助开发者在Java应用程序中读取、写入以及...