java合并sheet行_java poi Excel循环合并行
//Java poi 實(shí)現(xiàn)循環(huán)合并行,還是第一次遇到這種問題
//在網(wǎng)上查了很多資料,都不是自己想要的
//以下為自己研究后,寫的一點(diǎn)東西,給大家分享,希望對大家能有思路上的啟發(fā),也希望大家能提出寶貴意見,相互學(xué)習(xí),一起提高,謝謝
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.hssf.util.Region;
//定義excel-sheet的數(shù)據(jù)顯示
@SuppressWarnings("unchecked")
List> bodyList = (List>) model.get("body");
/***********************數(shù)據(jù)************************/
HSSFCellStyle style1 = workBook.createCellStyle();//數(shù)據(jù)樣式設(shè)置
HSSFFont font1 = workBook.createFont();
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
style1.setFont(font1);
int startRow = 0;//合并開始行號
int endRow = 0;//合并結(jié)束行號
double tspTotal = 0;//計(jì)算,合并的根據(jù)項(xiàng)的子項(xiàng)和的中間變量
double so2Total = 0;
double noxTotal = 0;
//數(shù)據(jù)第一行(因?yàn)橛袠?biāo)題和表頭,所以,數(shù)據(jù)行號從2開始)
int rowNum = 2;
//數(shù)據(jù)第一列
if(bodyList!=null && bodyList.size()>0){
//按照企業(yè)名稱、相同的合并行,并計(jì)算企業(yè)的tsp、so2、nox的總量
for(int i=0;i
int bodyline = 0;
HSSFRow row = sheet.createRow(rowNum);
for(int j = 0;j
row.createCell(bodyline).setCellValue(bodyList.get(i).get(j));
row.getCell(bodyline).setCellStyle(style1);
bodyline++;
}
if(i != 0){
if(bodyList.get(i-1).get(0).equals(bodyList.get(i).get(0))){//兩行的主項(xiàng)相等
tspTotal += Double.valueOf(bodyList.get(i-1).get(3).toString());
so2Total += Double.valueOf(bodyList.get(i-1).get(5).toString());
noxTotal += Double.valueOf(bodyList.get(i-1).get(7).toString());
endRow++;//則合并結(jié)束行號+1
if(i == bodyList.size()-1){//最后一行數(shù)據(jù)判斷、合并行
tspTotal += Double.valueOf(bodyList.get(i).get(3).toString());
so2Total += Double.valueOf(bodyList.get(i).get(5).toString());
noxTotal += Double.valueOf(bodyList.get(i).get(7).toString());
sheet.getRow(rowNum - (endRow - startRow)).getCell(3).setCellValue(tspTotal);//企業(yè)TSP總量
sheet.getRow(rowNum - (endRow - startRow)).getCell(5).setCellValue(so2Total);//企業(yè)SO2總量
sheet.getRow(rowNum - (endRow - startRow)).getCell(7).setCellValue(noxTotal);//企業(yè)NOX總量
//企業(yè)名稱
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
0, //first column (0-based)
0 //last column (0-based)
));//合并單元格
//企業(yè)TSP總量
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
3, //first column (0-based)
3 //last column (0-based)
));//合并單元格
//企業(yè)SO2總量
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
5, //first column (0-based)
5 //last column (0-based)
));//合并單元格
//企業(yè)NOX總量
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
7, //first column (0-based)
7 //last column (0-based)
));//合并單元格
}
}else{//兩行的主項(xiàng)不相等時(shí)
tspTotal += Double.valueOf(bodyList.get(i-1).get(3).toString());
so2Total += Double.valueOf(bodyList.get(i-1).get(5).toString());
noxTotal += Double.valueOf(bodyList.get(i-1).get(7).toString());
if(startRow == endRow){
sheet.getRow(rowNum - 1).getCell(3).setCellValue(tspTotal);//企業(yè)TSP總量
sheet.getRow(rowNum - 1).getCell(5).setCellValue(so2Total);//企業(yè)SO2總量
sheet.getRow(rowNum - 1).getCell(7).setCellValue(noxTotal);//企業(yè)NOX總量
}else{
sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(3).setCellValue(tspTotal);//企業(yè)TSP總量
sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(5).setCellValue(so2Total);//企業(yè)SO2總量
sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(7).setCellValue(noxTotal);//企業(yè)NOX總量
/******************************************根據(jù)計(jì)算出的開始行號和結(jié)束行號開始合并*****************************************/
//企業(yè)名稱
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
0, //first column (0-based)
0 //last column (0-based)
));//合并單元格
//企業(yè)TSP總量
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
3, //first column (0-based)
3 //last column (0-based)
));//合并單元格
//企業(yè)SO2總量
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
5, //first column (0-based)
5 //last column (0-based)
));//合并單元格
//企業(yè)NOX總量
sheet.addMergedRegion(new CellRangeAddress(
startRow, //first row (0-based)
endRow, //last row (0-based)
7, //first column (0-based)
7 //last column (0-based)
));//合并單元格
}
startRow = rowNum;//為下次合并做準(zhǔn)備,把合并開始行號賦值為下一行開始號
endRow = rowNum;//合并結(jié)束行同合并開始行
tspTotal = 0;//為中間值初始化
so2Total = 0;
noxTotal = 0;
}
}
rowNum++;
}
sheet.setColumnWidth(0,15*2*256);//第一列寬度
sheet.setColumnWidth(1,15*2*256);//第二列寬度
sheet.autoSizeColumn((short)8); //自動列寬(第九列)
}
總結(jié)
以上是生活随笔為你收集整理的java合并sheet行_java poi Excel循环合并行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收藏列表放入MySQL还是redis_m
- 下一篇: vb.net提取html网址,如何提取网