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方法中,添加处理图像的逻辑。检查源单元格是否为图像类型(CellType#PICTURE)。
case PICTURE:
    if (sourceCell instanceof XSSFPicture) {
        XSSFPicture sourcePicture = (XSSFPicture) sourceCell;
        int pictureIndex = sourceWorkbook.addPicture(sourcePicture.getPictureData().getData(), sourcePicture.getPictureType());
        XSSFDrawing drawing = targetSheet.createDrawingPatriarch();
        XSSFClientAnchor anchor = new XSSFClientAnchor();
        anchor.setCol1(sourceCell.getColumnIndex());
        anchor.setCol2(sourceCell.getColumnIndex() + 1);
        anchor.setRow1(targetRow.getRowNum());
        anchor.setRow2(targetRow.getRowNum() + 1);
        drawing.createPicture(anchor, pictureIndex);
    }
    break;

这段代码将复制源单元格中的图片数据,并在目标单元格上创建相应的图片对象。

  1. mergeFileSheet方法中,传递Workbook实例以便复制图片时使用。
private void mergeFileSheet(File originalFile, List<String> fileUrls) throws Exception {
    try (FileInputStream fis = new FileInputStream(originalFile);
         Workbook originalWorkbook = new XSSFWorkbook(fis)) {
        for (String fileUrl : fileUrls) {
            // 下载附件
            byte[] fileContent = fastDfsClient.download(fileUrl);
            String originalFilename = fastDfsClient.getOriginalFilename(fileUrl);
            try (ByteArrayInputStream bais = new ByteArrayInputStream(fileContent);
                 Workbook attachmentWorkbook = new XSSFWorkbook(bais)) {
                // 获取附件中sheet数量
                int numberOfSheets = attachmentWorkbook.getNumberOfSheets();
                int sheetIndex = 0;
                for (int i = 0; i < numberOfSheets; i++) {
                    // 附件sheet
                    Sheet attachmentSheet = attachmentWorkbook.getSheetAt(i);
                    // 判断sheet是否为空
                    boolean sheetEmpty = ExcelUtil.isSheetEmpty(attachmentSheet);
                    if(sheetEmpty){
                       continue;
                    }
                    sheetIndex++;
                    String newSheetName = "附件-" + originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "-" + sheetIndex;
                    // 创建新的sheet页来放置附件内容
                    Sheet newSheet = originalWorkbook.createSheet(newSheetName);
                    
                    // 在复制行之前传递源和目标工作簿对象
                    copyRows(attachmentSheet, newSheet, originalWorkbook);
                }
            }
        }
        // 写入修改后的Workbook到文件
        try (FileOutputStream fos = new FileOutputStream(originalFile)) {
            originalWorkbook.write(fos);
        }
    }
}

private void copyRows(Sheet sourceSheet, Sheet targetSheet, Workbook workbook) {
    for (Row sourceRow : sourceSheet) {
        Row targetRow = targetSheet.createRow(sourceRow.getRowNum());
        copyRow(sourceRow, targetRow, workbook);
    }
}

通过这些优化,您将能够复制源单元格中的图片,并在目标工作簿的相应单元格上创建相同的图片。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?