可以合并单元格
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);
}
}
}
}