使用Java POI插入Excel图片遮挡单元格左上边框如何解决?
POI插入Excel图片遮挡单元格边框修复方案
问题原因
你当前代码中XSSFClientAnchor构造方法的前四个偏移参数全部设置为0:
dx1:图片左上角距离锚定单元格左边界的水平偏移量,单位为EMU(1像素=9525 EMU)dy1:图片左上角距离锚定单元格上边界的垂直偏移量,单位为EMUdx2:图片右下角距离锚定目标单元格右边界的水平偏移量dy2:图片右下角距离锚定目标单元格下边界的垂直偏移量
偏移全为0的情况下,图片会完全贴紧单元格左上角,直接覆盖住左侧、顶部的单元格边框。
修复方法
给偏移参数设置合理的留白值,一般预留12像素的偏移即可避免覆盖边框,对应的EMU值为952519050,同时右下角偏移设置为负数值,让图片也远离右侧、底部边框。
修改后的代码示例:
// dx1、dy1设置1像素偏移,避免遮挡左上边框;dx2、dy2设置-1像素偏移,避免超出右下边框 ClientAnchor anchor = new XSSFClientAnchor(9525, 9525, -9525, -9525, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE); byte[] data = ImageUtils.getImage(imagePath); getDrawingPatriarch(cell.getSheet()).createPicture(anchor, cell.getSheet().getWorkbook().addPicture(data, getImageType(data)));
补充说明
- 如果你使用的是HSSF(对应xls格式Excel),偏移参数单位为1/256个单元格宽度/高度,可根据单元格实际尺寸调整偏移值,一般设置
dx1=10、dy1=10、dx2=-10、dy2=-10即可 - 可根据实际显示效果调整偏移数值,留白越大距离边框越远
内容的提问来源于stack exchange,提问作者buckwheat
相关产品推荐
相关产品推荐

