我正在使用POI,我想在xlsx中插入一些行。在这个文件中,我在表格中有一些图像。当我通过这样做移动行时:
sheet.shiftRows(30, sheet.getLastRowNum(), 10, true, true);
某些图像位于错误的位置并已调整大小。
如何在不调整图像大小的情况下一次移动所有项目并将它们放在正确的位置?
不幸的是,我无法发表评论。但在我的设置中,John Muiruris 回答的第一行应该是:
XSSFDrawing drawings = (XSSFDrawing) sheet.createDrawingPatriarch();
只是为了避免任何混淆。
遇到了
这个问题,这段代码对我有用基本上需要发生的是更改图像的锚点以反映新的行索引。
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 锚点 + 要移动的行数