天天看點

Java POI關于EXCEL拆分合并單元格并重新指派,以及空行移除

業務資料Excel為主,要導入資料庫的時候發現還得先去除合并單元格

---------------------------以下了解不可避免出現謬誤-------------------------------

Excel單元格的“空”有兩種。一種是Null,可以getCell再判斷,直接getvalue會報錯

還有一種是CellType.BLANK(舊版是Cell.CELL_TYPE_BLANK)

POI的Region操作是讀一個sheet(頁)的所有合并單元格

相當于你有多少劃分好的區域,存在方法進行統計和周遊

每個合并單元格,預設對應區域的第一行第一列的Cell有效,值為合并單元格顯示的值

用removeRegion,原區域的其他Cell會變成CellType.BLANK(也有可能是null?)

去除單列多行的合并單元格可以這樣操作:

//合并單元格數量
int sheetMergeCount = hssfSheet.getNumMergedRegions();
//合并單元格位置(位址)
CellRangeAddress range = (CellRangeAddress) hssfSheet.getMergedRegion(k);
//移除,有餘的會變為BLANK
hssfSheet.removeMergedRegion(k);
HSSFCell cfirst = hssfSheet.getRow(firstRow).getCell(firstColumn);
for (int m = firstRow + 1; m <= lastRow; m++) {
	HSSFCell tc = hssfSheet.getRow(m).getCell(firstColumn);
	copyCell(hssfWorkbook, cfirst, tc, true);//也可以在下面直接用CreateCell覆寫空的Cell

	FileOutputStream fos = new FileOutputStream(filePath);
	hssfWorkbook.write(fos);
	fos.close();
}
           

--------------------------------------------空行移除----------------------------------------------

網上看了很多資料,多是直接告訴你對應行什麼的

這裡說一種常用的情況:

if (probe == null || probe.equals("")) {
	hssfSheet.removeRow(row);
	if ((i+1) <= lrn) {
		hssfSheet.shiftRows(i+1, lrn, -1);
		lrn--;
		i--;
	}
}
           

删一行,下面的行往上移位

i+1相當于被移除行的下一行,lrn是表的總長,-1向上移動一行。

行移動相當于行覆寫。如同便利貼的尾部堆疊,或者牛皮癬廣告的覆寫貼合。