概述
业务资料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 POI关于EXCEL拆分合并单元格并重新赋值,以及空行移除所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复