`
jie2workjava
  • 浏览: 152045 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

导出excel,感觉通用,请提建议。谢谢

阅读更多

1. OutputExcelFile.java   工具类只开放outputExcel一个方法。

package com.test.output;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import com.test.vo.ExcelVo;

/**
 * 导出excel文件,相关配置参考classpath:excel.properties文件
 * @author hejie
 * @since 2010-8-5
 */
public class OutputExcelFile {
	private static Properties pro = new Properties();
	static{
		InputStream is = OutputExcelFile.class.getClassLoader().getResourceAsStream("excel.properties");
		try {
			pro.load(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 到处excel的主要方法
	 * @param os 文件输出流
	 * @param list<VO> 数据集合
	 * @throws IOException  
	 * @throws RowsExceededException
	 * @throws WriteException
	 * @throws ClassNotFoundException 
	 * @throws SecurityException 
	 * @throws NoSuchMethodException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	public static void outputExcel(OutputStream os,List list,String className) throws IOException, RowsExceededException, WriteException, SecurityException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		WritableWorkbook book = Workbook.createWorkbook(os);  //excel工作薄
		WritableSheet sheet=book.createSheet("第yi页",2);  //excel的一个页,工作表
		//
		toExcel(sheet,list,className);
		
		//写入数据并关闭文件   
		book.write();   
		book.close();   
		os.close();
	}
	/**
	 * 正是向excel中写入数据,主要是遍历集合和写入栏目
	 * @param sheet 页码
	 * @param list  数据集合
	 * @throws RowsExceededException
	 * @throws WriteException
	 * @throws ClassNotFoundException 
	 * @throws SecurityException 
	 * @throws NoSuchMethodException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	private static void toExcel(WritableSheet sheet,List list,String className) throws RowsExceededException, WriteException, SecurityException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		int x = 0;
		int y = 0;
		List fieldlist = getField(className);  //得到要显示的所有属性
		int count = fieldlist.size();
		System.out.println(count);
		for(int i=0;i<count;i++){
			sheet.addCell(isType(pro.get(fieldlist.get(i)), x++, 0));//栏目添加到cell
		}
		for (int i = 0; i < list.size(); i++) {
			Object ob = (Object) list.get(i);
			toSheet(sheet, ob , ++y  , fieldlist);//添加要显示的数据到cell
		}
	}
	/**
	 * 将每一个vo数据写到一行中。
	 * @param sheet  页码
	 * @param ev   数据vo对象
	 * @param y    坐标,此vo写入第几行。
	 * @throws RowsExceededException
	 * @throws WriteException
	 * @throws NoSuchMethodException 
	 * @throws SecurityException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	private static void toSheet(WritableSheet sheet,Object ob,int y,List flist) throws RowsExceededException, WriteException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		int x = 0;
		List showData = showDataSpecific(flist,ob);//通过显示的具体值
		int count = showData.size();
		for(int i=0;i<count;i++){
			sheet.addCell(isType(showData.get(i), x++, y));//将值写入到cell
		}
	}
	/**
	 * 将数据填入cell,分类型。缺少很多类型没有判断如date,image
	 * @param ob  要填入cell中的数据
	 * @param x  填入cell的坐标x
	 * @param y  填入cell的坐标y
	 * @return  返回cell
	 */
	private static WritableCell isType(Object ob,int x , int y){ 
		WritableCell cell = null;
		if(ob instanceof  Integer ){
			cell = new Number(x,y,(Integer) ob);
		}else if(ob instanceof Double){
			cell = new Number(x,y,(Double) ob);
		}else{
			cell = new Label(x,y,ob.toString());
		}
		return cell;
	}
	/**
	 * 获得要显示属性
	 * @param className
	 * @return
	 * @throws SecurityException
	 * @throws ClassNotFoundException
	 */
	private static List getField(String className) throws SecurityException, ClassNotFoundException{
		Field[] fs = Class.forName(className).getDeclaredFields();
		List list = new ArrayList();
		for(int i=0;i<fs.length;i++){
			String temp = className+"."+fs[i].getName();
			String value = (String) pro.get(temp);
			if(value!=null&&!"".equals(value.trim()))
				list.add(temp);
		}
		return list;
	}
	/**
	 * 得到一个对象的数据用于显示
	 * @param flist  要显示属性
	 * @param ob  用于显示的单个对象
	 * @return showData 用于显示的一条数据
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 */
	private static List showDataSpecific(List<String> flist , Object ob) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
//		sheet.addCell(isType(ev.getId(), x++, y));
//		Method m = ob.getClass().getMethod("get");
		List showData = new ArrayList();
		for(String s:flist){
			String[] ss = s.split("[.]");
			String field = ss[ss.length-1];
			String fieldU = field.substring(0,1).toUpperCase()+field.substring(1);
			Method m = ob.getClass().getMethod("get"+fieldU);
			Object value = m.invoke(ob);
			showData.add(value);
		}
		return showData;
	}
	//测试
//	public static void main(String[] arg) throws Exception{
//		Date d = new Date();
//		String fname = 1900 +d.getYear()+""+(1+d.getMonth())+""+d.getDate()+""+d.getTime()%1000000;
//		OutputStream os = new FileOutputStream(fname+"rp.xls");
////		OutputExcelFile oef = new OutputExcelFile();
//		System.out.println(os);
//		
//		List<ExcelVo> list = new ArrayList<ExcelVo>();
//		ExcelVo ev = new ExcelVo();
//		ev.setAge(18);
//		ev.setId(1);
//		ev.setName("hejie");
//		ev.setPassword("123456he");
//		list.add(ev);
//		
////		List<MyExcelVo> list = new ArrayList<MyExcelVo>();
////		MyExcelVo mev = new MyExcelVo();
////		mev.setId(1);
////		mev.setName("hejie");
////		list.add(mev);
//		OutputExcelFile.outputExcel(os,list,"com.test.vo.ExcelVo");
//	}
}

2.配置文件

#使用说明:要显示的字段的格式     类路径+要显示的字段=显示的文字
#该类通过此配置文件 配置可以导出多个vo
com.test.vo.ExcelVo.id=卡号
com.test.vo.ExcelVo.name=名字
com.test.vo.ExcelVo.age=年龄
com.test.vo.ExcelVo.password=密码
#
com.test.vo.MyExcelVo.name=名字

  表示我要显示ExcelVo的id,name,age,password。 如果是MyExcelVo对象就显示name属性

 

*基于 jxl-2.4.2.jar 包开发。占时不支持图片,data的类型数据。只有数字和字符。渴望大家修改传给我!

  我的邮箱:hejiejie12@126.com   qq:282123706   谢谢。

 

 

 

分享到:
评论

相关推荐

    Excel通用导出excel文件

    "Excel通用导出excel文件"这个主题涵盖了如何在不同情况下高效地实现这一目标,不论你是要处理小规模的数据还是大规模的数据集。下面,我们将深入探讨Excel的通用导出功能,以及如何利用它来优化你的工作流程。 ...

    GridControl通用导出Excel

    ### GridControl通用导出Excel知识点解析 #### 一、GridControl通用导出Excel概述 GridControl是DevExpress提供的一款用于展示和编辑数据的强大组件。在实际应用中,常常需要将GridControl中的数据导出到Excel中,...

    .net导出excel通用方法

    在.NET开发中,导出Excel是一项常见的需求,特别是在Web应用程序如ASP.NET中,我们需要将数据库中的数据导出为用户友好的格式,Excel是最常见的选择。本文将深入探讨如何使用C#编程实现从数据库中读取数据并将其导出...

    poi导出excel通用类

    标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...

    DevExpress 控件导出Excel通用方法(GridControl打印多表头和图片等,并支持多个控件同时打印)

    该资源提供关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,解决GridControl自带方法不能导出图片,多表头无法导出等问题,解决PivotGridControl导出时候自动分组的问题,真正做到所见所得的导出...

    POI导出Excel表格通用工具类

    利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...

    java导出excel文档通用工具类

    "java导出excel文档通用工具类"正是这样一个工具,它允许我们灵活地生成包含表头的Excel文件,提高开发效率。 Java中导出Excel主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java API。...

    poi导出根据模板导出excel和简单列表导出excel源码

    在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...

    Dev WinForm通用控件导出Excel方法(支持多个控件分工作薄导出)最新版

    该资源提供关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,解决GridControl自带方法不能导出图片,多表头无法导出等问题,解决PivotGridControl导出时候自动分组的问题,真正做到所见所得的导出...

    GOOGLE导出excel数据-通用版V2.0_KMLtoexcel_excel_V2_

    标题中的"GOOGLE导出excel数据-通用版V2.0_KMLtoexcel_excel_V2_"暗示了这是一个关于将Google地图的KML(Keyhole Markup Language)数据转换为Microsoft Excel电子表格的工具或教程的版本2.0。KML是一种XML格式,常...

    多功能通用Excel导入导出数据

    标题 "多功能通用Excel导入导出数据" 描述的是一个针对Excel数据处理的工具或库,它已经被二次封装,简化了导入导出操作。用户只需引入指定的jar包,并通过一行代码即可实现数据的导入和导出功能。描述中强调了其...

    JAVA中excel导入导出通用方法

    JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...

    通用的导出Excel

    通用的导出Excel,只要传参就行了,不需要去重新构建表格了,很实用。

    excel导出通用js

    layui js导出方法,一句话导出 Hello World,方便导出Excel文件,简单易用好上手,轻量级资源,简单易懂,

    excel导出通用

    在实际应用中,要导出Excel,首先我们需要创建一个`Workbook`对象,这代表Excel文件本身。接着,创建`Sheet`对象,它相当于Excel中的工作表。然后,我们可以为每个工作表添加`Row`(行)和`Cell`(单元格),并填充...

    Freemarker实现excel导出功能

    在Java世界里,它也被广泛用于生成静态文档或处理数据导出任务,比如Excel文件的生成。本篇文章将详细探讨如何使用Freemarker来实现Excel导出功能,并通过实际例子加深理解。 一、Freemarker基础 1. 模板语言:...

    C#通用Excel导入导出工具类

    本篇文章将深入探讨“C#通用Excel导入导出工具类”的实现原理及应用,主要涉及的技术点包括反射、特性以及如何创建一个高效的Excel导入导出解决方案。 首先,我们要理解反射在C#中的作用。反射是一种强大的机制,它...

    自定义动态导出excel封装类

    本文将详细讲解如何实现一个自定义的动态导出Excel封装类,以满足各种不同的需求。 首先,我们要理解为什么要自定义封装Excel导出。通常,Java开发中可以使用Apache POI库或JExcelAPI等第三方库来操作Excel。这些库...

    通用导入导出excel 类

    。net通用导入导出 excel 类,返回datatable

    通用的页面列表导出Excel控件

    "通用的页面列表导出Excel控件"就是解决此类问题的一种工具,它允许用户将网页上的表格或者列表数据方便地导出为Excel文件,以便进行进一步的数据处理、分析或者存储。这种控件的出现,极大地提高了数据管理和分享的...

Global site tag (gtag.js) - Google Analytics