package tpcframework.util.excel;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
*
* 类: <code> ExcelUtils </code>
* 功能描述: Excel的工具类
* 创建人: 王星乐
* 创建日期: 2013-8-1 上午10:31:48
* 开发环境: JDK6.0
*/
public class ExcelUtils {
/**
*
* 功能描述: 根据模板文件导出到输出流
* @param is 模板文件输入流
* @param os 输出流
* @param list 数据的集合
* @param properties Object的属性,或者是Map的key
* @param columns 表头
*/
public static void export(InputStream is, OutputStream os, List<?> list, List<String> properties) {
export(is, os, list, properties, true, 1, 0);
}
/**
*
* 功能描述: 根据模板文件导出到输出流
* @param is 模板文件的输入流
* @param os 输出流
* @param list 数据的集合
* @param properties Object的属性,或者是Map的key
* @param columns 表头
* @param generateNumber 是否生成序号
* @param rowIndex 行的索引
* @param columnIndex 列的索引
*/
public static void export(InputStream is, OutputStream os, List<?> list, List<String> properties,
boolean generateNumber, int rowIndex, int columnIndex) {
HSSFWorkbook wb = export(is, list, properties, generateNumber, rowIndex, columnIndex);
try {
wb.write(os);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
*
* 功能描述: 根据模板文件导出到HSSFWorkbook
* @param is 模板输入流
* @param list 数据的集合
* @param properties Object的属性,或者是Map的key
* @param columns 表头
* @param generateNumber 是否生成序号
* @param rowIndex 行的索引
* @param columnIndex 列的索引
* @return
*/
private static HSSFWorkbook export(InputStream is, List<?> list, List<String> properties, boolean generateNumber,
int rowIndex, int columnIndex) {
HSSFWorkbook wb = null;
try {
wb = new HSSFWorkbook(is);
int columns = properties.size();
if (generateNumber) {
columns++;
}
preProcess(wb, rowIndex, columnIndex, list.size() + 1, columns);
} catch (IOException e) {
throw new RuntimeException(e);
}
return process(wb, list, properties, generateNumber, rowIndex, columnIndex);
}
/**
*
* 功能描述: 处理
* @param wb HSSFWorkbook
* @param list 数据的集合
* @param properties Object的属性,或者是Map的key
* @param columns 表头
* @param generateNumber 是否生成序号
* @param rowIndex 行的索引
* @param columnIndex 列的索引
* @return
*/
private static HSSFWorkbook process(HSSFWorkbook wb, List<?> list, List<String> properties, boolean generateNumber,
int rowIndex, int columnIndex) {
HSSFSheet sheet = wb.getSheetAt(0);
//单元格索引
int cellIndex = columnIndex;
for (int i = 0; i < list.size(); i++) {
Object object = list.get(i);
HSSFRow row = sheet.getRow(rowIndex++);
cellIndex = columnIndex;
//如果需要生成序号
if (generateNumber) {
row.getCell(cellIndex++).setCellValue(new HSSFRichTextString(String.valueOf(i + 1)));
}
for (int j = 0; j < properties.size(); j++) {
HSSFCell cell = row.getCell(cellIndex++);
cell.setCellValue(new HSSFRichTextString(getProperty(object, properties.get(j)).toString()));
}
}
return wb;
}
/**
*
* 功能描述: 预处理,创建单元格并且应用样式
* @param wb HSSFWorkbook
* @param rowIndex 行的索引
* @param columnIndex 列的索引
* @param rows 行数
* @param columns 列数
* @return
*/
private static HSSFWorkbook preProcess(HSSFWorkbook wb, int rowIndex, int columnIndex, int rows, int columns) {
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow demoRow = sheet.getRow(rowIndex);
List<HSSFCellStyle> styles = new ArrayList<HSSFCellStyle>();
int cellIndex = columnIndex;
//抽取样式
for (int i = 0; i < columns; i++) {
HSSFCell cell = demoRow.getCell(cellIndex++);
HSSFCellStyle style = null;
if (cell != null) {
style = cell.getCellStyle();
}
styles.add(style);
}
//创建单元格并应用样式
for (int i = 0; i < rows; i++) {
HSSFRow row = sheet.createRow(rowIndex++);
if (demoRow != null) {
row.setHeight(demoRow.getHeight());
}
cellIndex = columnIndex;
for (int j = 0; j < columns; j++) {
HSSFCell cell = row.createCell(cellIndex++);
HSSFCellStyle style = styles.get(j);
if (style != null) {
cell.setCellStyle(style);
}
}
}
return wb;
}
/**
*
* 功能描述: 获取对象的属性
* @param object 对象
* @param property 属性名
* @return
*/
private static Object getProperty(Object object, String property) {
Object result = null;
try {
result = BeanUtils.getProperty(object, property);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
return result;
}
}
根据Excel模板生成Excel
最新推荐文章于 2024-04-24 17:58:01 发布
这是一个关于Java工具类ExcelUtils的介绍,该工具类用于根据模板文件生成Excel。它能处理输入流和输出流,支持设置数据集、属性、表头,并能选择是否生成序号,同时进行单元格样式预处理。
摘要由CSDN通过智能技术生成