`
skyzh
  • 浏览: 10942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

POI 生成 xls 和 xlsx

 
阅读更多

 POI 生成 Excel , 记录之

 

公司最近弄报表系统, 考虑到现在大部分都使用了2007及以上版本的office ,因此选定了poi .不过为了生成兼容2007以前版本, 还是做了一些处理. (根据后缀选择生成的office 版本)

 

以下是我写的工具类(已简化)

 

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

import com.cr.mode.action.ut.FileUploadAction;

public class POIExportUtil {

	public static enum ExcelType{XLS, XLSX};

	/**
	 * 生成Excel
	 * 
	 * @param data 数据行
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static Workbook generExcel(ExcelType type,final List<Map> data) {
		Workbook workbook; // 创建新的Excel工作薄
		if(type.compareTo(ExcelType.XLS)==0){//2003版
			workbook=new HSSFWorkbook();
		}else{
			workbook=new XSSFWorkbook();//默认2007版
		}
		Sheet sheet = workbook.createSheet();
		// 冻结窗格(从列A到行2)
		sheet.createFreezePane(0, 2);
		sheet.setDefaultColumnWidth(15); // 设置默认宽度
		Row row = null;

		row = sheet.createRow(0); //创建首行
		row.setHeightInPoints(18); //设置行高
		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,3)); //合并单元格
		Cell cell_top = row.createCell(0);
		cell_top.setCellValue("title"); //设置标题
		CellStyle topStyle = workbook.createCellStyle(); //样式
		
		topStyle.setAlignment(CellStyle.ALIGN_CENTER);// 设置居中


		Font font = workbook.createFont();// 设置字体
		font.setColor(IndexedColors.AQUA.getIndex()); //字体颜色
		font.setBoldweight(Font.BOLDWEIGHT_BOLD); //字重
		font.setFontHeightInPoints((short) 11); //字体大小
		topStyle.setFont(font);

		// 应用样式
		cell_top.setCellStyle(topStyle);

		// 在索引1的位置建行
		row = sheet.createRow(1);
		//表头样式
		CellStyle hstyle = workbook.createCellStyle();
		hstyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());//设置背景色
		hstyle.setFillPattern(CellStyle.SOLID_FOREGROUND); //颜色填充模式
		hstyle.setBorderBottom(CellStyle.BORDER_THIN);//设置底线
		
		row.setRowStyle(hstyle);
		Cell c=row.createCell(0);
		c.setCellStyle(hstyle); //应用样式
		c.setCellValue("ABCK");
		
		if (data != null) {
			//map中的key
			List<String> dataKeys=new ArrayList<String>(data.get(0).keySet());
			
			for (int i = 0; i < data.size(); i++) {
				// 创建行
				row = sheet.createRow(i + 2);
				// 得到行数据
				Map row_data = data.get(i);
				for (int n = 0; n < row_data.size(); n++) {
					Cell cell = row.createCell(n);
					Object cValue = row_data.get(dataKeys.get(n));
					if (cValue != null && cValue instanceof java.lang.Number) {
						cell.setCellValue(Double.valueOf(cValue.toString()));
					} else if (cValue == null) {
						// cell.setCellValue(0);
					} else {
						cell.setCellValue(String.valueOf(cValue));
					}
				}
			}
		}
		
		return workbook;
	}
	
	public static void main(String[] args) {
		try {
			Map m=new HashMap<String, Object>();
			m.put("c_createtime", "2014-5-9");
			List<Map> data=new ArrayList<Map>();
			data.add(m);
			Workbook book=POIExportUtil.generExcel(ExcelType.XLS, data);
			book.write(new FileOutputStream(new File("d:/test.xls")));
			System.out.println("生成结束");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics