poi shiftRows调整大小并且不移动图像

时间:2016-03-10 14:25:30

标签: java apache apache-poi xlsx

我正在使用POI,我想在xlsx中插入一些行。在这个文件中,我在表格中有一些图像。当我通过这样做来移动行:

sheet.shiftRows(30, sheet.getLastRowNum(), 10, true, true);

某些图片位于错误的位置并调整大小。

如何在不调整图像大小的情况下一次移动所有项目并将它们放在正确的位置?

1 个答案:

答案 0 :(得分:0)

遇到这个问题,这段代码对我有用 基本上需要发生的是更改图像的锚点以反映新的行索引。

XSSFDrawing drawings = mainSheet.createDrawingPatriarch();
for(XSSFShape shape : drawings.getShapes()){
    if(shape instanceof Picture){
        XSSFPicture picture = (XSSFPicture) shape;
        XSSFClientAnchor anchor = picture.getClientAnchor();
        int row1 = anchor.getRow1();
        if (row1 >= 30 && row1 <= mainSheet.getLastRowNum()) {
            int row2 = anchor.getRow2();
            anchor.setRow1(row1 + 10);
            anchor.setRow2(row2 + 10);
        }
     }
 }

这就是发生的事情:

  • 获取当前图纸中的所有图纸。
  • 检查图像row1锚点是否在要移动的行的范围内
  • 将新的row1锚点设置为旧的row1锚点+要移动的行数
  • 将新的row2锚点设置为旧的row1锚点+要移动的行数