[转载]java根据xml配置文件导出excel – 白飞龙 – 博客园.
1、xml配置文件:
<?xml version="1.0" encoding="utf-8"?>
<excel>
<element title="检测库信息表" class="com.model.CheckRecord">
<property name="xmmc" display_name="项目名称"></property>
<property name="sampleNo" display_name="样品编号"></property>
<property name="detectTime" display_name="检测日期"></property>
<property name="jcbh" display_name="检测板号"></property>
<property name="ypmc" display_name="样品名称"></property>
<property name="yplx" display_name="样品类型"></property>
<property name="ypcd" display_name="样品产地"></property>
<property name="resultType" display_name="检测类型"></property>
<property name="resultValue" display_name="检测结果"></property>
<property name="resultDetect" display_name="检测读数值"></property>
<property name="resultTip" display_name="检测提示"></property>
<property name="submitStaff" display_name="送检人员"></property>
<property name="submitTime" display_name="送检时间"></property>
</element>
</excel>
title:excel标题栏
class:javaBean
display_name:列标题
name:实体property
不同列表只需在上述配置文件增加
2、ExportExcelUtil工具类实现代码:
package com.egf.modules.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.egf.common.util.DateTimeUtils;
/**
* 导出excel工具类
* @author BaiFL
*/
public class ExportExcelUtil {
/**标题**/
private String title;
private InputStream inputStream;
private OutputStream outputStream;
private HSSFWorkbook workbook;
private HSSFSheet sheet;
/**表格行**/
private HSSFRow row;
/**单元格**/
private HSSFCell cell;
/**字体**/
private HSSFFont font;
/**单元格样式**/
private HSSFCellStyle cellStyle;
/**
* 字段及字段注释
* key:字段名
* value:字段注释
*/
private Map<String, String> propertyMap = new HashMap<String, String>();
/**
* 导出excel
* @param className 对象
* @param list 导出结果集
* @param request
* @param response
*/
public void export(String className, List<?> list, HttpServletRequest request,
HttpServletResponse response){
//初始化
this.init(className);
/* 设置资源头信息 */
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "filename=" + title
+ DateTimeUtils.getTimeShortString(new Date()) + ".xls");
try {
//创建输出流
outputStream = response.getOutputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//设置字体
font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 12);
//设置单元格类型
cellStyle = workbook.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//创建第一行title
row = sheet.createRow(0);
this.setCellValue(0, title);
//合并单元格:0行~0行,0列~propertyMap.size() - 1列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, propertyMap.size() - 1));
//创建第二行标题行
row = sheet.createRow(1);
int i = 0;
//遍历propertyMap
for(String key : propertyMap.keySet()){
//创建单元格
this.setCellValue(i, propertyMap.get(key));
i++;
}
//遍历数据集合
for(int j = 0; j < list.size(); j++) {
Object object = list.get(j);
//创建数据行,从第三行开始
row = sheet.createRow(j + 2);
int k = 0;
for(String key : propertyMap.keySet()){
Field f;
String value;
try {
f = object.getClass().getDeclaredField(key);
//设置私有字段的可访问性
f.setAccessible(true);
//获取字段get方法
value = String.valueOf(f.get(object));
//设置单元格
this.setCellValue(k, value);
k++;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
try {
workbook.write(outputStream);
outputStream.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if(outputStream != null){
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 初始化
* @param className
*/
private void init(String className){
inputStream = ExportExcelUtil.class
.getResourceAsStream("/resources/exportExcel/excel.xml");
this.workbook = new HSSFWorkbook();
this.sheet = workbook.createSheet();
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(inputStream);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取根节点
Element excel = document.getRootElement();
//获取element集合
List<Element> elementList = excel.elements("element");
for(Element element : elementList){
if(className.equals(element.attributeValue("class"))){
title = element.attributeValue("title");
//element下所有property集合
List<Element> childList = element.elements();
for(Element child : childList){
propertyMap.put(child.attributeValue("name"),
child.attributeValue("display_name"));
}
}
}
}
/**
* 设置单元格
* @param index
* @param value
*/
private void setCellValue(int index, String value){
//创建单元格
cell = row.createCell(index, HSSFCell.CELL_TYPE_STRING);
cell.setCellStyle(cellStyle);
cell.setCellValue(value);
//设置第index列宽为自动
sheet.autoSizeColumn(index);
}
}
Mikel