`

java 导出Excel 使用apache POI.jar 包

 
阅读更多

使用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);
		
	}

}

 

 

 

 

 

分享到:
评论

相关推荐

    org.apache.poi.xwpf.converter.pdf-1.0.6.jar

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)。在Java环境中,它提供了一个强大的API,使得开发者能够读取、写入和操作这些文档。在给定的...

    org.apache.poi.xwpf.converter-0.9.8.jar

    在实际应用中,"org.apache.poi.xwpf.converter-0.9.8.jar"通常会与其他Apache POI库一起使用,如"HSSF"(处理旧版Excel .xls文件)和"XSSF"(处理新式Excel .xlsx文件)。开发者需要在他们的Java项目中引入这个JAR...

    org.apache.poi.xwpf.converter.core-1.0.4.jar

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)。在Java环境中,它提供了一组API,使得开发者能够读取、写入以及操作这些文件。"org....

    java导出excel及POI3.10jar包

    以上就是一个简单的Java使用POI 3.10导出Excel的例子。实际应用中,你可能需要处理更复杂的数据结构,如循环创建多行多列,读取数据源填充内容,设置自定义样式等。同时,为了提高性能,可以考虑使用SXSSFWorkbook...

    java导出excel POI jar包

    本篇文章将深入讲解如何使用POI库在Java中实现Excel的导出功能,以及涉及到的相关jar包及其作用。 首先,`poi-ooxml-schemas-3.15-beta1.jar`是POI库中的XML schema定义,用于解析和创建符合Office Open XML标准的...

    org.apache.poi3.9 jar包

    总的来说,Apache POI 3.9 jar包是一个强大的Java库,用于处理Excel文件。通过熟练掌握其API,开发者可以轻松地实现与Excel文件的交互,从而满足各种业务需求。不过,需要注意的是,处理大型Excel文件时,由于内存...

    org.apache.poi依赖包

    这个"org.apache.poi"依赖包是Java开发者在处理这些文件时不可或缺的工具。它提供了丰富的API,使得在Java环境中读取、写入和操作Office文档变得轻而易举。 Apache POI 3.17 版本是该项目的一个稳定版本,包含了...

    导出excel文档所需要的poi的jar包

    总之,Apache POI的jar包为你提供了在Java中操作Excel的强大能力,无论是导出数据,还是进行数据分析,都能得心应手。不过需要注意的是,由于Apache POI处理的文件格式复杂,可能会消耗较多的内存,因此在处理大量...

    poi.jar 全部jar包程序文件

    在Java开发环境中,Apache POI提供了 poi.jar 包,它是进行Excel数据读取和写入的核心库。本篇文章将详细介绍如何利用poi.jar包来高效地处理Excel数据。 1. **Apache POI介绍** Apache POI 是一个开放源代码的Java...

    导出excel表格的jar包.zip

    在Java web开发中,导出Excel表格是一项常见的需求,例如为了...通过上述知识点,开发者可以利用Java和Apache POI库轻松实现Web应用程序中Excel文件的导出功能,同时结合实际需求进行优化,提高用户体验和系统性能。

    POI poi相关所有jar包 poi jar包 poi最全jar包

    导入这些jar包后,开发者可以使用Apache POI API创建、修改和读取Office文件。例如,可以创建新的Excel工作簿,添加工作表,插入公式,设置单元格样式,读取数据,甚至处理图表和图片。对于Word文档,可以添加文本、...

    poi.jar导入导出jar包

    【标题】"poi.jar导入导出jar包"指的是Apache POI项目提供的Java库,主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个jar包是开发人员在Java环境中进行读写Excel文档时必不可少的工具。 ...

    apache 的 POI.jar包

    综上所述,Apache POI.jar包是Java开发中处理Microsoft Office文件不可或缺的工具,无论是在数据处理、报告生成还是文件转换等方面,都能提供强大且灵活的支持。使用poi-4.1.2版本,开发者可以利用最新的功能和改进...

    Apache POI 3.16 JAR 包

    总的来说,Apache POI 3.16 JAR包为Java开发者提供了强大且灵活的工具,用于处理Excel文件。无论是在数据导入导出、报表生成还是自动化任务中,它都是一个不可或缺的库。通过理解和熟练使用其API,开发者可以构建出...

    poi 的jar 包

    这里的"poi 的jar 包"指的是Apache POI项目的相关jar文件,这些jar文件是开发人员在Java环境中使用POI库时需要引入的依赖。 1. **poi-3.0.1-FINAL-20070705.jar**:这是Apache POI的核心库,包含了处理Excel(HSSF...

    Java读取Excel所需jar包 (poi.jar等)

    本篇文章将详细探讨使用Apache POI读取Excel文件所需的jar包,以及如何在Java项目中集成和使用这些库。 首先,Apache POI的核心jar包是poi-ooxml-schemas和poi-ooxml。这两个jar包提供了对Excel文件的XML Schema...

    poi方式导出excel需要的3个jar包

    本篇文章将详细探讨使用Apache POI库通过Java导出Excel所需的三个关键JAR包。 首先,我们来了解Apache POI项目。它是一个开源项目,主要由Apache软件基金会维护,其目标是提供一套API,使得开发者可以使用Java处理...

    poi.jar资源

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个"poi.jar资源"包含的是Apache POI的核心组件,版本为3.16,能够帮助开发者在Java应用程序中读取、写入以及...

Global site tag (gtag.js) - Google Analytics