日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java合并sheet行_java poi Excel循环合并行

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java合并sheet行_java poi Excel循环合并行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//Java poi 實現循環合并行,還是第一次遇到這種問題

//在網上查了很多資料,都不是自己想要的

//以下為自己研究后,寫的一點東西,給大家分享,希望對大家能有思路上的啟發,也希望大家能提出寶貴意見,相互學習,一起提高,謝謝

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的數據顯示

@SuppressWarnings("unchecked")

List> bodyList = (List>) model.get("body");

/***********************數據************************/

HSSFCellStyle style1 = workBook.createCellStyle();//數據樣式設置

HSSFFont font1 = workBook.createFont();

style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中

style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中

style1.setFont(font1);

int startRow = 0;//合并開始行號

int endRow = 0;//合并結束行號

double tspTotal = 0;//計算,合并的根據項的子項和的中間變量

double so2Total = 0;

double noxTotal = 0;

//數據第一行(因為有標題和表頭,所以,數據行號從2開始)

int rowNum = 2;

//數據第一列

if(bodyList!=null && bodyList.size()>0){

//按照企業名稱、相同的合并行,并計算企業的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))){//兩行的主項相等

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++;//則合并結束行號+1

if(i == bodyList.size()-1){//最后一行數據判斷、合并行

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);//企業TSP總量

sheet.getRow(rowNum - (endRow - startRow)).getCell(5).setCellValue(so2Total);//企業SO2總量

sheet.getRow(rowNum - (endRow - startRow)).getCell(7).setCellValue(noxTotal);//企業NOX總量

//企業名稱

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

0, //first column (0-based)

0 //last column (0-based)

));//合并單元格

//企業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)

));//合并單元格

//企業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)

));//合并單元格

//企業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{//兩行的主項不相等時

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);//企業TSP總量

sheet.getRow(rowNum - 1).getCell(5).setCellValue(so2Total);//企業SO2總量

sheet.getRow(rowNum - 1).getCell(7).setCellValue(noxTotal);//企業NOX總量

}else{

sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(3).setCellValue(tspTotal);//企業TSP總量

sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(5).setCellValue(so2Total);//企業SO2總量

sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(7).setCellValue(noxTotal);//企業NOX總量

/******************************************根據計算出的開始行號和結束行號開始合并*****************************************/

//企業名稱

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

0, //first column (0-based)

0 //last column (0-based)

));//合并單元格

//企業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)

));//合并單元格

//企業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)

));//合并單元格

//企業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;//為下次合并做準備,把合并開始行號賦值為下一行開始號

endRow = rowNum;//合并結束行同合并開始行

tspTotal = 0;//為中間值初始化

so2Total = 0;

noxTotal = 0;

}

}

rowNum++;

}

sheet.setColumnWidth(0,15*2*256);//第一列寬度

sheet.setColumnWidth(1,15*2*256);//第二列寬度

sheet.autoSizeColumn((short)8); //自動列寬(第九列)

}

總結

以上是生活随笔為你收集整理的java合并sheet行_java poi Excel循环合并行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。