org.beanfuse.transfer.exporter.writer.ExcelItemWriter.java Source code

Java tutorial

Introduction

Here is the source code for org.beanfuse.transfer.exporter.writer.ExcelItemWriter.java

Source

//$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;
            }
        }
    }
}