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的通用导出功能,以及如何利用它来优化你的工作流程。 ...
### GridControl通用导出Excel知识点解析 #### 一、GridControl通用导出Excel概述 GridControl是DevExpress提供的一款用于展示和编辑数据的强大组件。在实际应用中,常常需要将GridControl中的数据导出到Excel中,...
在.NET开发中,导出Excel是一项常见的需求,特别是在Web应用程序如ASP.NET中,我们需要将数据库中的数据导出为用户友好的格式,Excel是最常见的选择。本文将深入探讨如何使用C#编程实现从数据库中读取数据并将其导出...
标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...
该资源提供关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,解决GridControl自带方法不能导出图片,多表头无法导出等问题,解决PivotGridControl导出时候自动分组的问题,真正做到所见所得的导出...
利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...
"java导出excel文档通用工具类"正是这样一个工具,它允许我们灵活地生成包含表头的Excel文件,提高开发效率。 Java中导出Excel主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java API。...
在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...
该资源提供关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,解决GridControl自带方法不能导出图片,多表头无法导出等问题,解决PivotGridControl导出时候自动分组的问题,真正做到所见所得的导出...
标题中的"GOOGLE导出excel数据-通用版V2.0_KMLtoexcel_excel_V2_"暗示了这是一个关于将Google地图的KML(Keyhole Markup Language)数据转换为Microsoft Excel电子表格的工具或教程的版本2.0。KML是一种XML格式,常...
标题 "多功能通用Excel导入导出数据" 描述的是一个针对Excel数据处理的工具或库,它已经被二次封装,简化了导入导出操作。用户只需引入指定的jar包,并通过一行代码即可实现数据的导入和导出功能。描述中强调了其...
JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...
通用的导出Excel,只要传参就行了,不需要去重新构建表格了,很实用。
layui js导出方法,一句话导出 Hello World,方便导出Excel文件,简单易用好上手,轻量级资源,简单易懂,
在实际应用中,要导出Excel,首先我们需要创建一个`Workbook`对象,这代表Excel文件本身。接着,创建`Sheet`对象,它相当于Excel中的工作表。然后,我们可以为每个工作表添加`Row`(行)和`Cell`(单元格),并填充...
在Java世界里,它也被广泛用于生成静态文档或处理数据导出任务,比如Excel文件的生成。本篇文章将详细探讨如何使用Freemarker来实现Excel导出功能,并通过实际例子加深理解。 一、Freemarker基础 1. 模板语言:...
本篇文章将深入探讨“C#通用Excel导入导出工具类”的实现原理及应用,主要涉及的技术点包括反射、特性以及如何创建一个高效的Excel导入导出解决方案。 首先,我们要理解反射在C#中的作用。反射是一种强大的机制,它...
本文将详细讲解如何实现一个自定义的动态导出Excel封装类,以满足各种不同的需求。 首先,我们要理解为什么要自定义封装Excel导出。通常,Java开发中可以使用Apache POI库或JExcelAPI等第三方库来操作Excel。这些库...
。net通用导入导出 excel 类,返回datatable
"通用的页面列表导出Excel控件"就是解决此类问题的一种工具,它允许用户将网页上的表格或者列表数据方便地导出为Excel文件,以便进行进一步的数据处理、分析或者存储。这种控件的出现,极大地提高了数据管理和分享的...