gpt4 book ai didi

java - 如何使用java移动Excel表格中的图像

转载 作者:行者123 更新时间:2023-12-02 01:38:50 26 4
gpt4 key购买 nike

我有一个 XSSFSheet,其图像位于我使用的行的末尾。添加新行时,我想将所有图像向下移动一行。我找到了this similar question关于移动图表,并尝试使用答案中实际移动图表的部分,因为它看起来也适用于图像。

java.util.List<CTTwoCellAnchor> drawingAnchors = ((XSSFDrawing)sheet.getDrawingPatriarch()).getCTDrawing().getTwoCellAnchorList();
for (CTTwoCellAnchor drawingAnchor : drawingAnchors) {
int fromRow = drawingAnchor.getFrom().getRow();
int toRow = drawingAnchor.getTo().getRow();
if (fromRow >= startRow) {
drawingAnchor.getFrom().setRow(fromRow + n);
drawingAnchor.getTo().setRow(toRow + n);
}
}

但这不起作用,而是抛出 NoClassDefFoundError
(编辑:我现在发现这个错误可以通过提供 FAQ-N10025 中提到的所有模式 ooxml-schemas 的完整 jar 来解决。感谢@Axel Richter)

尝试了几种不同的方法后,我找到了一种方法。由于我花了很长时间,而且还没有任何相关信息,所以我决定将我的发现发布在 SO 上。
请在我自己的答案中找到我的解决方案。干杯

最佳答案

以下代码获取工作表的 Drawing Patriarch,迭代其所有形状,如果形状的类型为 XSSFPicture,则它会通过其 XSSFClientAnchor 修改行索引。

int moveRowsBy = 1; // 1 will move the images 1 row down. moveRowsBy can be negative to move up

XSSFDrawing drawing = sheet.getDrawingPatriarch();
for (XSSFShape shape : drawing.getShapes()) {
if (shape instanceof XSSFPicture){
XSSFClientAnchor anchor = ((XSSFPicture)shape).getClientAnchor();

anchor.setRow1(anchor.getRow1() +moveRowsBy);
anchor.setRow2(anchor.getRow2() +moveRowsBy);

// if needed you could change column too, using one of these:
// anchor.setCol1(newColumnInt)
// anchor.setCol1(anchor.getCol1() + moveColsBy)
}
}

关于java - 如何使用java移动Excel表格中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com