使用Apache POI时Excel消息框单元格边框覆盖内容问题求助
解决单元格边框覆盖批注文字的问题
你的橙色单元格底部边框把批注(消息框)的文字给挡住了,核心原因是创建批注时设置的XSSFClientAnchor锚点参数,没给批注留出足够的空间避开单元格边框。
问题分析
看你代码里创建批注的这行:
comment1 = patr.createCellComment(new XSSFClientAnchor(500, 800, 1500, 1500, (short)iCell, iRow, (short) iCell + 3, iRow +3));
这里的第二个参数800是批注在起始单元格内的垂直偏移量(dy1),数值太小导致批注顶部紧贴原单元格底部,刚好被单元格的底部边框覆盖。
解决方案
你可以通过调整锚点参数来解决,两种思路任选:
方案1:让批注往下挪,避开边框
把垂直偏移量(dy1)从800调大,比如改成1200,让批注顶部和单元格底部拉开距离:
// 增大垂直偏移,让批注远离单元格底部边框 comment1 = patr.createCellComment(new XSSFClientAnchor(500, 1200, 1500, 1500, (short)iCell, iRow, (short) iCell + 3, iRow +3));
方案2:把批注移到单元格右侧(更推荐)
如果不想让批注在单元格下方,直接把锚点改到原单元格的右侧列,彻底避免重叠:
// 将批注锚定到原单元格右侧,起始列iCell+1,结束列iCell+4,行范围保持iRow到iRow+2 comment1 = patr.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, (short)(iCell+1), iRow, (short)(iCell+4), iRow+2));
小补充
XSSFClientAnchor的参数顺序是dx1, dy1, dx2, dy2, col1, row1, col2, row2,简单说:
dx1/dy1:批注在起始单元格内的水平/垂直偏移dx2/dy2:批注在结束单元格内的水平/垂直偏移col1, row1:批注锚定的起始单元格位置col2, row2:批注锚定的结束单元格位置(决定批注大小)
你可以根据实际需求微调这些参数,找到最舒服的显示效果。
内容的提问来源于stack exchange,提问作者Shinoy Shaji
相关产品推荐
相关产品推荐

