package com.founder.cms.core.util;
import Java.io.Serializable;
import Java.lang.reflect.Field;
public class FieldTitle implements Serializable {
private static final long serialVersionUID = 8641298907642008247L;
private Field field; //对象属性
private String title; //excel中的列标题
public FieldTitle(Field field, String title) {
this.field = field;
this.title = title;
}
public Field getField() {
return field;
}
public void setField(Field field) {
this.field = field;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
FieldTitle类用作记录需要导出的列对应与java对象中的属性和excel中的列标题信息
package com.founder.cms.core.util;
import Java.io.IOException;
import Java.io.InputStream;
import Java.lang.reflect.Field;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
public class ExportConfigHelper {
private static Logger logger = Logger.getLogger(ExportConfigHelper.class);
private static final String CONFIGURATION_FILE_PREFIX = "export/";
/**
* 根据配置文件获取需要导出的字段名以及列标题
* @param clz
* @param configFile
* @return
*/
public List<FieldTitle> getFieldTitles(Class clz, String configFile) {
String url = CONFIGURATION_FILE_PREFIX + configFile + ".properties";
List<FieldTitle> result = new ArrayList<FieldTitle>();
InputStream is = ExportConfigHelper.class.getClassLoader().getResourceAsStream(url);
if (is == null) {
throw new RuntimeException("Cannot find Configuration file " + url);
}
Properties properties = new Properties();
Field[] fields = clz.getDeclaredFields();
try {
properties.load(is);
for (Field field : fields) {
String title = properties.getProperty(field.getName());
if (StringUtils.isNotEmpty(title)) {
result.add(new FieldTitle(field, title));
}
}
} catch (IOException e) {
logger.error("Read configuration file " + url, e);
throw new RuntimeException("Read configuration file " + url, e);
}
return result;
}
}
ExportConfigHelper 类用作根据属性文件获取需要导出的字段名以及对应的列标题.
package com.founder.cms.core.util;
import Java.io.IOException;
import Java.io.OutputStream;
import Java.io.UnsupportedEncodingException;
import Java.text.SimpleDateFormat;
import Java.util.List;
import javax.servlet.http.HttpServletResponse;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class ExcelUtil {
private ExcelUtil() {}
/**
* 设置头信息
*
* @param response HttpServletResponse
* @param fileName 默认的文件名称
*/
public static void setExcelContentType(HttpServletResponse response, String fileName) {
try {
fileName = new String(fileName.getBytes("MS932"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
// should no happen
}
response.reset();
response.setContentType("application/msexcel;charset=MS932");
response.setHeader("Content-disposition", "attachment;filename= " + fileName);
}
public static void write(HttpServletResponse response, List<Object> objects, Class clz, String propertiesFileName) {
setExcelContentType(response, getFileName());
ExportConfigHelper helper = new ExportConfigHelper();
//根据properties文件获取需要导出的字段名以及在excel中的标题名称
List<FieldTitle> result = helper.getFieldTitles(clz, propertiesFileName);
WritableWorkbook wwbook = null;
OutputStream os = null;
try {
os = response.getOutputStream();
wwbook = jxl.Workbook.createWorkbook(os);
WritableSheet wsheet = wwbook.createSheet("sheet1", 0);// set sheet
for (int i = 0; i < result.size(); i++) { //set header title
jxl.write.Label titleCell = new jxl.write.Label(i, 0, result.get(i).getTitle());
wsheet.addCell(titleCell);
}
for (int i = 1; i <= objects.size(); i++) { // set value
Object obj = objects.get(i-1);
for(int j = 0; j < result.size(); j++) {
result.get(j).getField().setAccessible(true);
Object value = result.get(j).getField().get(obj);
jxl.write.Label valueCell = new jxl.write.Label(j, i, ( value != null)? value.toString() : "");
wsheet.addCell(valueCell);
}
}
wwbook.write();
} catch (IOException e) {
e.printStackTrace();
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}finally {
try {
wwbook.close();
os.close();
} catch (IOException ie) {
ie.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
public static String getFileName() {
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmm");
StringBuilder sb = new StringBuilder();
sb.append(sf.format(System.currentTimeMillis()));
sb.append(".xls");
return sb.toString();
}
}
ExcelUtil 类是最终实现写excel文件功能.
属性文件配置如下:
id=ID
name=Name
age=Age
#email=Email
以上能够实现简单的导出,可以运行。但是现在一般的情况下导出是使用模板的形式导出,上
面的导出在某些方面存在很大的局限性,配置文件太多,虽然也是可以把所有的导出标题配置
一个配置文件中。
原创地址:http://www.blogjava.net/rain1102/archive/2009/06/22/283579.html
分享到:
相关推荐
本篇将详细介绍如何使用JXL库来导出Excel数据表,并结合描述中的信息,探讨其核心特性和实现方式。 首先,我们来理解"JXL导出Excel数据表"这一主题。JXL(Java Excel API)是一个开源项目,它允许Java程序创建、...
本文将详细介绍如何利用Struts2、Hibernate(简称S2H)结合jxl.jar库来实现在Web应用中导出Excel文件的功能。 #### 二、环境搭建与准备工作 1. **项目搭建**: - 创建一个新的Struts2项目。 - 配置好Struts2和...
在IT行业中,Excel是一种广泛使用的电子表格工具,用于数据存储、数据分析和报告生成。当我们需要在Java应用程序中处理...通过熟练掌握JXL,你可以轻松地将Excel集成到你的Java应用中,实现数据的导入导出和分析功能。
java导出Excel 时候 相同行合并(可合并多列); 已测试通过;
JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要实现 excel 文件的导入和导出...
同样,导出Excel功能可以通过创建一个新的工作簿,填充数据,然后设置样式和写入输出流来实现。以下是一个简单的导出示例: ```java @GetMapping("exportList") public void exportList(HttpServletResponse ...
《jxl资源包:高效Excel导入导出的利器》 在IT行业中,处理数据往往是一项繁琐的任务,尤其是在数据量庞大的情况下。此时,高效的数据导入导出工具显得尤为重要。"jxl资源包"正是这样一个专为Java开发者设计的库,...
"通用的excel导出"指的是能够适应各种数据结构,只需要提供一个数据列表就能自动生成Excel文件的功能。这种功能大大简化了开发过程,提高了工作效率。在这个场景中,我们有两个关键文件:`exportDataTest.java`和`...
### Java 导出 Excel 在 S2SH 项目中的实现 #### 概述 在 Java 开发过程中,常常需要处理各种格式的数据文件,其中 Excel 文件因其便捷性和通用性被广泛使用。Struts2、Spring 和 Hibernate(简称 S2SH)作为经典...
此外,导出Excel时,我们也可以利用反射来动态地设置单元格的值。通过获取数据对象的字段值,我们可以将其填入对应的单元格。同时,还可以根据字段的注解设置单元格的样式,如颜色、背景色等。 总结来说,结合JXL库...
总结一下,"excelUtils公共导出支持xls与xlsx"是一个基于JXL库的Java工具,它提供了对xls和xlsx两种Excel文件格式的支持,用于数据的导出和导入。通过`ExcelUtil`类,开发者可以便捷地处理Excel文件,而`...
本文将详细讨论如何使用JXL库创建一个通用的工具类来读取Excel模板并填充数据。 首先,我们需要了解JXL库的基本用法。JXL库提供了多种API,可以用来操作Excel文件的各个部分,包括工作簿(Workbook)、工作表...
在Excel中插入图片是常见的需求,使用jxl库可以实现这个功能。jxl提供了方法来插入JPEG、GIF、PNG等格式的图片到Excel工作表中。这在创建报告或者数据分析时非常有用,可以使数据更加直观易懂。 4. **转换与集成**...
POI可以实现Word,Exce的导入导出。可以进行jxl的升级,来解决版本低的问题。
在Java编程环境中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换的应用场景中。这个主题主要涉及如何利用Java库将数据库中的数据转换并保存为Excel文件。以下是一些核心知识点: 1. **Java ...
本文将探讨一个基于Java的Excel导入通用类源码,它利用了反射技术、JXL库以及properties配置文件,旨在提供一种灵活且可扩展的数据导入导出解决方案。 首先,我们来看“反射应用”。在Java中,反射是一种强大的机制...
excel的操作,在开发中是经常遇到的问题,也是程序员比较费心思的开发问题,虽然现在有jxl,poi等第三方开发组件的支持,对excel的操作变的简单了很多,但是大多数都不通用,在此提供一个excel导出工具,内含源码,...
上述代码是使用Java导出Excel的通用方法,主要涉及了Apache POI库中的jxl包,用于处理Excel文件。下面将详细介绍这个方法的各个部分及其工作原理: 1. **初始化响应对象**:通过`ServletActionContext.getResponse...
本文将深入探讨如何使用POI和JXL框架批量导出CSV文件,处理千万级的数据,同时避免内存溢出的问题。 首先,让我们了解CSV(Comma Separated Values)文件格式。CSV是一种通用的、轻量级的文件格式,用于存储表格...
这个类可能包含了对多个score类的实例化和调用,或者封装了一些通用的Excel操作方法。 "wen.txt"和"java.txt"可能分别包含了相关的文字说明和Java代码片段。wen.txt可能提供了一些关于如何使用这些Java类的说明或者...