POI导出数据相关的辅助类

package zxc.util.ieport.poi;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.springframework.util.CachingMapDecorator;

import zxc.exceptions.BaseRuntimeException;
import zxc.model.support.FileBaseBean;
import zxc.model.support.IeudBean;
import zxc.util.ieport.IExport;

/**
 * 这是一个组件工作
 * 
 * @author KHT
 * 
 */
public class POIExcelFactory {

	private static POIExcelFactory	excelFactory		= new POIExcelFactory();

	public static final String		DEFAULT_EXPORT_KEY	= "DEFAULT_EXPORT_KEY";

	@SuppressWarnings("unchecked")
	private Map<String, IExport>	exportContainer		= new CachingMapDecorator() {
															@Override
															protected Object create(Object key) {
																return new DefaultExcelExport();
															}

														};

	protected POIExcelFactory() {
		super();
	}

	public static POIExcelFactory getFactory() {
		return excelFactory;
	}

	public IExport getDefaultExport() {
		return this.getExport(DEFAULT_EXPORT_KEY);
	}

	public IExport getExport(String exportKey) {
		return this.exportContainer.get(exportKey);
	}

	public void processExcelExport(FileBaseBean model) {
		//需要导出
		IeudBean ieudBean = model.getIeudBean();
		if (ieudBean.getExport() != null && ieudBean.getExport()) {
			POIWorkContext workContext = POIWorkContext.getCurrentContext();
			workContext.initWorkContext(model);

			this.getDefaultExport().exportData(workContext.getCurrentListData());

			//如果采用一次性导出,或者在多次导出的情况下,处于完成状态时,则做最后处理
			if (ieudBean.getOneTimeExport() || ieudBean.getExportCompleted()) {
				ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(4069);
				try {
					workContext.getCurrentWorkbook().write(arrayOutputStream);
				} catch (IOException e) {
					throw new BaseRuntimeException("导出文件失败");
				}
				ieudBean.setDownLoadStream(new ByteArrayInputStream(arrayOutputStream.toByteArray()));
				ieudBean.setContentType("application/vnd.ms-excel");
				ieudBean.setContentDisposition("risen-zxc-" + new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(new Date()) + ".xls");
				workContext.clearCurrentContext();//清理资源
			}
		}
	}

}
 
posted @ 2011-07-20 16:23  上善¤若水  阅读(134)  评论(0编辑  收藏  举报