ZBLOG

private void mergeFileSheet(File originalFile, List fileUrls) throws Exception { try (FileInputStream fis = new FileInputStream(originalFile); Workbook originalWorkbook = new XSSFWorkbook(fis)) { for (Strin...

要支持复制行图片,您需要对代码进行以下修改:

  1. copyRow方法中添加处理图片的逻辑。首先,检查源单元格是否为图片类型:
if (sourceCell.getCellTypeEnum() == CellType.PICTURE) {
    // 获取源单元格中的图片数据
    PictureData pictureData = ((XSSFPicture) sourceCell).getPictureData();
    // 将图片数据写入目标工作簿并获取新的图片索引
    int pictureIndex = workbook.addPicture(pictureData.getData(), getPictureType(pictureData.getPictureType()));
    // 创建一个新的绘图对象并在目标单元格上插入图片
    Drawing<?> drawing = targetSheet.createDrawingPatriarch();
    ClientAnchor anchor = createClientAnchor(workbook, sourceCell.getRowIndex(), targetCell.getColumnIndex());
    Picture picture = drawing.createPicture(anchor, pictureIndex);
}

请注意,这里使用了一些辅助方法 getPictureTypecreateClientAnchor。您可以根据实际情况自行实现或使用合适的库。

  1. 更新mergeFileSheet方法,在创建新的sheet页之前,将当前附件文件名和序号存储起来:
List<String> newSheetNames = new ArrayList<>();
for (int i = 0; i < numberOfSheets; i++) {
    // ...
    sheetIndex++;
    String newSheetName = "附件-" + originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "-" + sheetIndex;
    
    // 添加到列表中以备后续使用
    newSheetNames.add(newSheetName);
    
    // ...
}
  1. 在写入修改后的Workbook到文件之前,更新已创建的图片的链接信息:
for (String sheetName : newSheetNames) {
    Sheet sheet = originalWorkbook.getSheet(sheetName);
    if (sheet != null) {
        XSSFDrawing drawing = (XSSFDrawing) sheet.createDrawingPatriarch();
        for (XSSFShape shape : drawing.getShapes()) {
            if (shape instanceof XSSFPicture) {
                XSSFPicture picture = (XSSFPicture) shape;
                XSSFClientAnchor anchor = picture.getClientAnchor();
                
                // 更新图片中的链接信息
                anchor.setRow1(anchor.getRow1() + totalRowCount);
                anchor.setRow2(anchor.getRow2() + totalRowCount);
            }
        }
    }
}

// 写入修改后的Workbook到文件
try (FileOutputStream fos = new FileOutputStream(originalFile)) {
    originalWorkbook.write(fos);
}

这里假设您使用的是XSSFWorkbookXSSFDrawing,请根据实际情况调整代码。

以上是对给定代码进行了简单修改以支持复制行图片。请注意,具体实现可能因您所使用的库和需求而有所不同,请根据实际情况进行相应调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=16363

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?