java poi 跨行合并单元格,POI框架导出EXCEL的简单列子(跨行跨列)合并单元格 | 学步园...

public static void main(String[] args) throws IOException {

try{

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet = wb.createSheet("new sheet");

HSSFCellStyle style = wb.createCellStyle(); //样式对象

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平

HSSFRow row = sheet.createRow((short) 0);

HSSFRow row2 = sheet.createRow((short) 1);

sheet.addMergedRegion(new Region(0,(short)0,1,(short)0));

HSSFCell ce=row.createCell((short)0);

ce.setEncoding(HSSFCell.ENCODING_UTF_16);//中文处理

ce.setCellValue("项目//日期"); //表格的第一行第一列显示的数据

ce.setCellStyle(style); //样式,居中

int num=0;

for(int i=0;i<9;i++){ //循环9次,每一次都要跨单元格显示

//计算从那个单元格跨到那一格

int celln=0;

int celle=0;

if(i==0){

celln=0;

celle=1;

}else{

celln=(i*2);

celle=(i*2+1);

}

//单元格合并

//四个参数分别是:起始行,起始列,结束行,结束列

sheet.addMergedRegion(new Region(0,(short)(celln+1),0,(short)(celle+1)));

HSSFCell cell = row.createCell((short) (celln+1) );

cell.setCellValue("merging"+i); //跨单元格显示的数据

cell.setCellStyle(style); //样式

//不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额”

HSSFCell cell1 = row2.createCell((short) celle );

HSSFCell cell2 = row2.createCell((short) (celle+1));

cell1.setEncoding(HSSFCell.ENCODING_UTF_16);

cell1.setCellValue("数量");

cell1.setCellStyle(style);

cell2.setEncoding(HSSFCell.ENCODING_UTF_16);

cell2.setCellValue("金额");

cell2.setCellStyle(style);

num++;

}

//在后面加上合计百分比

// 合计 在最后加上,还要跨一个单元格

sheet.addMergedRegion(new Region(0,(short)(2*num+1),0,(short)(2*num+2)));

HSSFCell cell = row.createCell((short) (2*num+1) );

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

cell.setCellValue("合计");

cell.setCellStyle(style);

HSSFCell cell1 = row2.createCell((short) (2*num+1) );

HSSFCell cell2 = row2.createCell((short) (2*num+2) );

cell1.setEncoding(HSSFCell.ENCODING_UTF_16);

cell1.setCellValue("数量");

cell1.setCellStyle(style);

cell2.setEncoding(HSSFCell.ENCODING_UTF_16);

cell2.setCellValue("金额");

cell2.setCellStyle(style);

//百分比 同上

sheet.addMergedRegion(new Region(0,(short)(2*num+3),0,(short)(2*num+4)));

HSSFCell cellb = row.createCell((short) (2*num+3) );

cellb.setEncoding(HSSFCell.ENCODING_UTF_16);

cellb.setCellValue("百分比");

cellb.setCellStyle(style);

HSSFCell cellb1 = row2.createCell((short) (2*num+3) );

HSSFCell cellb2 = row2.createCell((short) (2*num+4) );

cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);

cellb1.setCellValue("数量");

cellb1.setCellStyle(style);

cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);

cellb2.setCellValue("金额");

cellb2.setCellStyle(style);

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

System.out.print("OK");

}catch(Exception ex){

ex.printStackTrace();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值