//$Id: DefaultExcelWriter.java,v 1.1 2007-3-24 下午09:06:19 chaostone Exp $
/*
* Copyright c 2005-2009
* Licensed under GNU LESSER General Public License, Version 3.
* http://www.gnu.org/licenses
*
*/
/********************************************************************************
* @author chaostone
*
* MODIFICATION DESCRIPTION
*
* Name Date Description
* ============ ============ ============
*chaostone 2007-3-24 Created
*
********************************************************************************/
package org.beanfuse.transfer.exporter.writer;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
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;
import org.beanfuse.transfer.Transfer;
import org.beanfuse.transfer.exporter.Context;
public class ExcelItemWriter extends AbstractItemWriter {
protected int countPerSheet = 50000;
protected HSSFWorkbook workbook = new HSSFWorkbook(); // 建立新HSSFWorkbook对象
protected int index = 0;
protected HSSFSheet sheet = workbook.createSheet((index + 1) + "-" + countPerSheet);
protected HSSFCellStyle dateStyle = workbook.createCellStyle();
protected HSSFCellStyle timeStyle = workbook.createCellStyle();
public ExcelItemWriter() {
super();
dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
timeStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
}
public ExcelItemWriter(OutputStream outputStream) {
this();
this.outputStream = outputStream;
}
public int getCountPerSheet() {
return countPerSheet;
}
public void setCountPerSheet(int dataNumPerSheet) {
this.countPerSheet = dataNumPerSheet;
}
public void write(Object obj) {
if (index + 1 >= countPerSheet) {
sheet = workbook.createSheet((index + 1) + "-" + (index + countPerSheet));
}
writeExcel(obj);
index++;
}
public void writeTitle(Object title) {
write(title);
}
public String getFormat() {
return Transfer.EXCEL;
}
public void writeExcel(Object datas) {
HSSFRow row = sheet.createRow(index); // 建立新行
if (datas != null) {
if (datas.getClass().isArray()) {
Object[] values = (Object[]) datas;
for (int i = 0; i < values.length; i++) {
HSSFCell cell = row.createCell((short) i);
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
if (values[i] instanceof Number) {
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(((Number) values[i]).doubleValue());
} else if (values[i] instanceof java.sql.Date) {
cell.setCellValue((Date) values[i]);
cell.setCellStyle(dateStyle);
} else if (values[i] instanceof java.util.Date) {
cell.setCellValue((Date) values[i]);
cell.setCellStyle(timeStyle);
} else if (values[i] instanceof Calendar) {
cell.setCellValue((Calendar) values[i]);
cell.setCellStyle(timeStyle);
} else {
cell.setCellValue(new HSSFRichTextString((values[i] == null) ? ""
: values[i].toString()));
}
}
} else {
HSSFCell cell = row.createCell((short) 0);
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
if (datas instanceof Number) {
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
}
cell.setCellValue(new HSSFRichTextString(datas.toString()));
}
}
}
public void close() {
try {
workbook.write(outputStream);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 设置每个sheet多少条记录
*/
public void setContext(Context context) {
super.setContext(context);
if (null != context) {
Object count = context.getDatas().get("countPerSheet");
if (null != count && NumberUtils.isNumber(count.toString())) {
int countParam = NumberUtils.toInt(count.toString());
if (countParam > 0)
this.countPerSheet = countParam;
}
}
}
}