现在的位置: 首页 > 综合 > 正文

SXSSFWorkbook merge相同数据区的算法

2013年03月09日 ⁄ 综合 ⁄ 共 964字 ⁄ 字号 评论关闭

Workbook workbook = new SXSSFWorkbook(1000);

private void merge(Workbook workbook,int sheetCount){
for(int i =0;i<sheetCount;i++){
Sheet sheetMeger = workbook.getSheet("报表页-"+i);
int lasetRowNum =  sheetMeger.getLastRowNum();
 if(lasetRowNum > 1){
 int rowNum = 1;
 int rowNumNext = 1;

                                 //z这个地方可以灵活设定有哪些列需要合并,我现在是前3列合并
  for(int k = 0 ;k< 3 ;k++){
 while(rowNumNext < lasetRowNum ){
 rowNumNext = mergeRow(sheetMeger,rowNum,rowNumNext,k,k);
 sheetMeger.addMergedRegion(new CellRangeAddress(rowNum,rowNumNext,k,k));
 rowNum = rowNumNext + 1;
 rowNumNext = rowNumNext + 1;
 }
 rowNum = 1;
 rowNumNext = 1;
  }
 }
}
}

private   int mergeRow(Sheet sheetMeger ,int startRow,int endRow,int startCols,int endCols){
     int rownNum = sheetMeger.getLastRowNum();
 Row cRow = sheetMeger.getRow(startRow);
 Row nRow = sheetMeger.getRow(endRow + 1);
 
 if(endRow< rownNum && cRow.getCell(startCols).getStringCellValue().equals(nRow.getCell(endCols).getStringCellValue())){
 return   mergeRow( sheetMeger , startRow, ++endRow,startCols,endCols);
 }else{
return  endRow ;
 }
}

抱歉!评论已关闭.