自己写的很简单的pio生成excel的工具类

16 篇文章 0 订阅

可以合并单元格

1,javabean

package com..pojo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.CellStyle;

/**
 * 生成excel所用的javabean
 * 
 * @author yg
 */
public class ExcelBean {
	private Integer rowNum;
	private Integer columnNum;
	private Object cellValue;
	private Integer mergeRowNum;
	private Integer mergeColumnNum;
	private Integer columnWidth;
	/**
	 * 暂支持样式 HorizontalAlignment、VerticalAlignment
	 */
	private Map<String, Object> styles =new HashMap<>();// 单元格样式

	public ExcelBean(Integer rowNum, Integer columnNum, Object cellValue) {
		super();
		this.rowNum = rowNum;
		this.columnNum = columnNum;
		this.cellValue = cellValue;
	}

	public ExcelBean(Integer rowNum, Integer columnNum, Object cellValue, Integer mergeRowNum, Integer mergeColumnNum,Integer columnWidth) {
		super();
		this.rowNum = rowNum;
		this.columnNum = columnNum;
		this.cellValue = cellValue;
		this.mergeRowNum = mergeRowNum;
		this.mergeColumnNum = mergeColumnNum;
		this.columnWidth = columnWidth;
	}

	public ExcelBean() {
		super();
	}

	public Integer getColumnWidth() {
		return columnWidth;
	}

	public void setColumnWidth(Integer columnWidth) {
		this.columnWidth = columnWidth;
	}

	public Integer getRowNum() {
		return rowNum;
	}

	public void setRowNum(Integer rowNum) {
		this.rowNum = rowNum;
	}

	public Integer getColumnNum() {
		return columnNum;
	}

	public void setColumnNum(Integer columnNum) {
		this.columnNum = columnNum;
	}

	public Object getCellValue() {
		return cellValue;
	}

	public void setCellValue(Object cellValue) {
		this.cellValue = cellValue;
	}

	public Integer getMergeRowNum() {
		return mergeRowNum;
	}

	public void setMergeRowNum(Integer mergeRowNum) {
		this.mergeRowNum = mergeRowNum;
	}

	public Integer getMergeColumnNum() {
		return mergeColumnNum;
	}

	public void setMergeColumnNum(Integer mergeColumnNum) {
		this.mergeColumnNum = mergeColumnNum;
	}

	public Map<String, Object> getStyles() {
		return styles;
	}

	public void setStyles(Map<String, Object> styles) {
		this.styles = styles;
	}

	public static void main(String[] args) {
		List<ExcelBean> list = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 5; j++) {
				if(i==0&&j==1) {
					continue;
				}
				if(i==1&&j==0) {
					continue;
				}
				ExcelBean excelBean = new ExcelBean(i, j, i + "" + j);
				list.add(excelBean);
				if(i==0&&j==0) {
					excelBean.setMergeColumnNum(1);
					excelBean.setMergeRowNum(1);
				}
				if(i==5&&j==0) {
					excelBean.setMergeColumnNum(1);
					excelBean.setMergeRowNum(1);
				}
			}
		}
		new ExportExcelUtil().exportExcel(list, "D:\\a.xlsx");
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}

工具类ExportExcelUtil

package com.pojo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import com.util.LogUtil;

public class ExportExcelUtil {
	private SXSSFWorkbook wb;
	private SXSSFSheet sheet;
	public void exportExcel(List<ExcelBean> list, String filePath) {
		File file = new File(filePath);
		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		OutputStream os = null;
		try {
			String sheetName="sheet1";
			wb = new SXSSFWorkbook(500);
			sheet = wb.getSheet(sheetName);
			if (sheet == null)
				sheet = wb.createSheet(sheetName);
			setDataList(list);
			os = new FileOutputStream(file);
			wb.write(os);
		} catch (Exception e) {
			LogUtil.error(e);
		} finally {
			try {
				if (os != null) {
					os.flush();
					os.close();
				}
				if (wb != null)
					wb.close();
			} catch (IOException e) {
				LogUtil.error(e);
			}

		}

	}
	private void setDataList(List<ExcelBean> list) {
		Integer rowNum;
		Integer columnNum;
		Object cellValue;
		SXSSFRow row ;
		SXSSFCell cell ;
		Map<String, Object> styles;// 单元格样式
		CellStyle style;
		for (ExcelBean excelBean : list) {
			rowNum=excelBean.getRowNum();
			columnNum=excelBean.getColumnNum();
			cellValue=excelBean.getCellValue();
			styles=excelBean.getStyles();
			row = this.sheet.getRow(rowNum);
			if(row == null) {
				row = this.sheet.createRow(rowNum);
			}
			if(excelBean.getColumnWidth()!=null) {
				sheet.setColumnWidth(columnNum, 256*excelBean.getColumnWidth()+184);
			}
			cell = row.getCell(columnNum);
			cell=cell==null?row.createCell(columnNum):cell;
			style =wb.createCellStyle();
			setStyle(style,styles);
			try {
				if (cellValue == null) {
					cell.setCellValue("");
				} else if (cellValue instanceof String) {
					cell.setCellValue((String) cellValue);
				} else if (cellValue instanceof Integer) {
					cell.setCellValue((Integer) cellValue);
				} else if (cellValue instanceof Long) {
					cell.setCellValue((Long) cellValue);
				} else if (cellValue instanceof Double) {
					cell.setCellValue((Double) cellValue);
				} else if (cellValue instanceof Float) {
					cell.setCellValue((Float) cellValue);
				} else if (cellValue instanceof Date) {
					DataFormat format = wb.createDataFormat();
					style.setDataFormat(format.getFormat("yyyy-MM-dd"));
					cell.setCellValue((Date) cellValue);
				}
			} catch (Exception ex) {
				LogUtil.error("设值 [" + row.getRowNum() + "," + columnNum + "] error: " + ex.toString());
				cell.setCellValue(cellValue.toString());
			}
			cell.setCellStyle(style);
		}
		mergeCell(list);
	}
	private void setStyle(CellStyle style, Map<String, Object> styles) {
		Object horizontalAlignment = styles.get("HorizontalAlignment");
		if(horizontalAlignment!=null) {
			style.setAlignment((HorizontalAlignment)horizontalAlignment);
		}
		Object verticalAlignment = styles.get("VerticalAlignment");
		if(verticalAlignment!=null) {
			style.setVerticalAlignment((VerticalAlignment)verticalAlignment);
		}
		
	}
	private void mergeCell(List<ExcelBean> list) {
		Integer mergeRowNum;
		Integer mergeColumnNum;
		Integer rowNum;
		Integer columnNum;
		CellRangeAddress region ;
		for (ExcelBean excelBean : list) {
			rowNum=excelBean.getRowNum();
			columnNum=excelBean.getColumnNum();
			mergeRowNum=excelBean.getMergeRowNum() == null?0:excelBean.getMergeRowNum();
			mergeColumnNum=excelBean.getMergeColumnNum()== null?0:excelBean.getMergeColumnNum();
			//CellRangeAddress(起始行号,终止行号, 起始列号,终止列号).
			try {
				if(mergeRowNum>0&&mergeColumnNum>0) {
					region = new CellRangeAddress(rowNum, rowNum+mergeRowNum, columnNum, columnNum+mergeColumnNum);
					sheet.addMergedRegion(region);
				}else if(mergeRowNum>0) {
					region = new CellRangeAddress(rowNum, rowNum+mergeRowNum, columnNum, columnNum);
					sheet.addMergedRegion(region);
				}else if(mergeColumnNum>0) {
					region = new CellRangeAddress(rowNum, rowNum, columnNum, columnNum+mergeColumnNum);
					sheet.addMergedRegion(region);
				}
			} catch (Exception e) {
				LogUtil.error("合并单元格错误",e);
			}
		}
	}
	
	
	
	
	
	
	
	
	
	
	
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值