`
iorule
  • 浏览: 1594 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

J2EE使用注解导出Excel

阅读更多
上次不好意思。发这个贴没写完。被弄为隐藏帖了。

使用注解导出Excel主要使用了POI包和反射原理,使得导出段可以灵活配置,并且不需要额外的配置文件
1:注解代码:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author 1097877378
 *
 */
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ExportColumn {
	/**
	 * 列名
	 */
	public String[] name() default {};//为什么用数组,大家想一下
	
	/**
	 * 格式化字符串
	 */
	public String format() default "";
	
	/**
	 * 导出次序
	 */
	public int order() default 0; 
}



2:在需要导出的DTO或实体中对需要导出的字段配置导出注解
示例:
import java.sql.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import =ExportColumn;

public class Users  {
	private Long id;
	private String name;
	private String password;
	private Date birthday;
	
	public Long getId() {
		return id;
	}
	
	@ExportColumn(name={"姓名"})
	public String getName() {
		return name;
	}
	
	@ExportColumn(name={"密码"})
	public String getPassword() {
		return password;
	}
	
	@ExportColumn(format="%1$tY-%1$tm-%1$td", name={"生日"})
	public Date getBirthday() {
		return birthday;
	}

        ...省略get,set


3:导出类,利用反射原理:



import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

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 ExportColumn;

public class ExportExcelUtil {
	/**
	 * 导出Excel文件到输出流
	 * @param response
	 * @throws IOException
	 */
	public static <T> void exportExcel(List<T> data, String fileName, HttpServletResponse response) throws Exception {
		response.reset();
		//fileName = URLEncoder.encode(fileName, "UTF-8");//only IE
		fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");//IE and FireFox
		response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");// 设定输出文件头   
        response.setContentType("application/msexcel");// 定义输出类型 
        HSSFWorkbook workbook = createWorkbook(data);
        OutputStream os = response.getOutputStream();// 取得输出流   
        workbook.write(os);
        os.flush();
        os.close();    
	}


	private static <T> HSSFWorkbook createWorkbook(List<T> data) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
		HSSFWorkbook workbook = new HSSFWorkbook(); 
		Sheet sheet = workbook.createSheet("sheet1"); {
			createHeader(sheet, data.get(0));
			createBody(sheet, data);
		}
		return workbook;
	}
	
	private static <T> void createHeader(Sheet sheet, T dataRow) {
		Row header = sheet.createRow(0);
		Method[] methods = dataRow.getClass().getMethods();
		Arrays.sort(methods, new Comparator<Method>() {
			public int compare(Method o1, Method o2) {
				return o1.getName().compareTo(o2.getName());
			}});
		int cellindex = 0;
		for(Method method : methods) {//取得DTO的导出列
			if (method.isAnnotationPresent(ExportColumn.class)) {
				ExportColumn export = method.getAnnotation(ExportColumn.class);
				String[] titles = export.name();
				Cell headerCell = header.createCell(cellindex);
				headerCell.setCellValue(titles[0]);
				cellindex ++;
			}
		}
	}
	
	private static <T> void createBody(Sheet sheet, List<T> data) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		if (!data.isEmpty()) {
			int rowindex = 1;
			for (T datarow : data) {
				Row sheetrow = sheet.createRow(rowindex);
				Method[] methods = datarow.getClass().getMethods();
				Arrays.sort(methods, new Comparator<Method>() {
					public int compare(Method o1, Method o2) {
						return o1.getName().compareTo(o2.getName());
					}});
				int cellindex = 0;
				for(Method method : methods) {//取得DTO的导出列
					if (method.isAnnotationPresent(ExportColumn.class)) {
						Object cellvalue = (Object)method.invoke(datarow);
						Cell sheetcell = sheetrow.createCell(cellindex);
						if (null != cellvalue) {
							ExportColumn export = method.getAnnotation(ExportColumn.class);
							String cellstr = cellvalue.toString();
							if (!export.format().equals("")){
								cellstr = String.format(export.format(), cellvalue);//按注解格式化
							}
							sheetcell.setCellValue(cellstr);
						}
						cellindex ++;
					}
				}
				rowindex ++;
			}
		}
	}
}



4: 搞定:导出时执行
   得到Users 的list
ExportExcelUtil.exportExcel(usersList, "人员信息表", response);

这个是个比较老的版本,现在已经把注解和ExportExcelUtil升级了,不过还没有高强度测试。。
欢迎大家提出意见
分享到:
评论

相关推荐

    J2EE项目开发Excel导出

    在J2EE项目开发中,Excel...综上所述,J2EE项目开发中的Excel导出涉及到Java编程、Apache POI库的使用以及数据处理技巧。提供的示例可以帮助开发者快速理解和实施这一功能,从而在实际项目中高效地完成数据导出任务。

    J2EE项目开发Excel导入导出操作组件源代码(附带说明文档).rar

    在J2EE应用程序开发中,数据的导入导出是一项常见的需求,特别是在处理大量结构化数据时,Excel文件因其直观易用的特点,成为了理想的数据交换格式。本组件专注于解决这一问题,提供了一套完整的J2EE项目开发中进行...

    J2EE项目开发Excel导入导出操作组件源代码

    在J2EE项目开发中,Excel的导入导出功能是一个常用且重要的部分,尤其是在处理大量数据时。这个组件源代码提供了实现这一功能的解决方案。让我们深入探讨一下相关知识点。 1. **J2EE基础**: J2EE,即Java 2 ...

    J2EE使用Jxl实现导出Execl

    本文将详细讲解如何使用J2EE平台结合开源库Jxl来实现Excel的导出功能,同时也会涉及到Java的反射机制。 J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建企业级应用的框架,它提供了服务器端组件...

    j2ee组件(包括验证码、上传下载、分页、导出excel)

    在Java企业级应用开发中,J2EE组件是构建复杂应用程序的关键部分。这些组件提供了丰富的功能,使得开发者能够高效地处理各种业务需求。本压缩包包含的四个主要组件——验证码、上传下载、分页和导出Excel,都是Web...

    J2EE项目开发Excel导入导出操作组件源代码(附带说明文档)

    总之,这个J2EE项目开发的Excel导入导出组件利用了Java的Apache POI库,实现了高效且灵活的Excel数据处理。开发者可以通过学习和使用这个组件,快速地在自己的项目中实现Excel数据的导入导出功能,提升开发效率,...

    java实现一个配置简单功能强大的excel工具类,搞定大多数excel文件导入导出

    对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 请看一下这个类都有哪些功能: * 1.实体属性配置了...

    实现一个配置简单功能强大的excel工具类搞定大多数导入导出

    对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 看看这个类都有哪些功能吧: * 1.实体属性配置了注解...

    java j2ee poi xsl excel 文档操作 包括上传 下载

    在这个场景中,我们关注的是如何使用Java J2EE来处理Excel文档,特别是通过Apache POI库进行读写操作,并涉及到XSL转换。 Apache POI是一个开源项目,专门用于读取和写入Microsoft Office格式的文件,包括Excel(....

    J2EE使用详解

    ### J2EE使用详解 #### 一、J2EE简介及安装配置 ##### 1.1 J2EE概述 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为开发企业级应用而设计的一个软件平台。它基于Java 2 SDK, Standard Edition...

    java的Excel导入导出源码

    包含的“J2EE项目开发Excel导入导出操作组件源代码(附带说明文档)”很可能是项目开发的指南,详细解释了源码的使用方法、注意事项以及可能出现的问题,这对于理解和使用这些源码非常有帮助。 通过学习这个源码,...

    J2EE中应用Ant包压缩导出的Excel文件并提供下载

    本知识点主要围绕如何在J2EE环境中使用Ant来生成Excel文件并提供下载服务进行讲解。 首先,我们要理解Ant的核心概念。Ant是一个基于XML的构建工具,它的主要配置文件是`build.xml`,其中定义了各种构建任务。通过...

    java_excel_util

    对于J2EE项目导入导出Excel是最普通和实用功能, 本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 看看这个类都有哪些功能吧: * 1.实体属性配置了...

    J2EE使用report绘制报表所用Jar包

    4. **报表编译与执行**:在J2EE应用中,你需要将jrxml文件编译为.jasper二进制文件,然后通过Java代码调用JasperFillManager填充数据并使用JasperExportManager导出报表。编译过程通常使用JasperCompileManager,而...

    j2ee j2ee j2ee j2ee j2ee j2ee

    j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee

    j2ee Filter使用原理

    j2ee Filter使用原理本代码里面首先是介绍了Filter实现的原理,然后模拟的了j2ee项目中Filter的使用原理,然后由此又延伸了Struts2的Interceptor实现原理,并且给予了详细的注释。

    J2EE指南(J2EE中文教材)

    它包括了组成J2EE平台的技术以及描述如何开发J2EE组件并部署在J2EE软件开发包上。 这篇指南不是为J2EE服务器及工具供应商准备的,它没有解释如何实现J2EE结构,也没有解释J2EE软件包。J2EE规范描述了J2EE结构并可以...

    j2ee.jar架包

    j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar...

    J2EE 指南 J2EE中文教材

    ### J2EE 指南知识点详解 #### J2EE 概述 J2EE(Java 2 Platform, Enterprise Edition)是一种广泛应用于企业级应用程序开发的平台标准和技术框架。它基于Java SE,并针对大型分布式系统提供了更为丰富的特性和功能...

    J2EE开发使用手册(PDF)

    J2EE开发使用手册(PDF)

Global site tag (gtag.js) - Google Analytics