我是靠谱客的博主 热心导师,这篇文章主要介绍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向上移动一行。
行移动相当于行覆盖。如同便利贴的尾部堆叠,或者牛皮癣广告的覆盖贴合。

最后

以上就是热心导师最近收集整理的关于Java POI关于EXCEL拆分合并单元格并重新赋值,以及空行移除的全部内容,更多相关Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(179)

评论列表共有 0 条评论

立即
投稿
返回
顶部