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()方法中添加复制图片的逻辑。你可以使用Drawing对象和ClientAnchor来处理图片的复制。
private void copyRow(Row source, Row target, Workbook workbook) {
    // 复制行内容(文本、数值等)
    for (int i = source.getFirstCellNum(); i <= source.getLastCellNum(); i++) {
        Cell sourceCell = source.getCell(i);
        if (sourceCell != null) {
            Cell targetCell = target.createCell(i, sourceCell.getCellType());
            // 省略其他代码...

            // 根据单元格类型复制值
            switch (sourceCell.getCellTypeEnum()) {
                case STRING:
                    targetCell.setCellValue(sourceCell.getStringCellValue());
                    break;
                case NUMERIC:
                    targetCell.setCellValue(sourceCell.getNumericCellValue());
                    break;
                case BOOLEAN:
                    targetCell.setCellValue(sourceCell.getBooleanCellValue());
                    break;
                case FORMULA:
                    // 如果单元格是公式,则复制公式本身
                    targetCell.setCellFormula(sourceCell.getCellFormula());
                    break;
                case BLANK:
                    // target.setCellType(CellType.BLANK);
                    break;
                default:
                    // 默认处理
            }
        }
    }

    // 复制行中的图片
    Drawing<?> drawingSource = ((XSSFSheet)source.getSheet()).createDrawingPatriarch();
    Drawing<?> drawingTarget = ((XSSFSheet)target.getSheet()).createDrawingPatriarch();

    for (Object obj : drawingSource) {
        if (obj instanceof Picture) {
            Picture picture = (Picture)obj;

            int rowIdx = picture.getClientAnchor().getRow1();
            if (rowIdx == source.getRowNum()) {
                ClientAnchor anchor = picture.getClientAnchor();

                int col1 = anchor.getCol1();
                int row1 = target.getRowNum();
                int col2 = anchor.getCol2();
                int row2 = row1 + (anchor.getRow2() - anchor.getRow1());

                PictureData pictureData = picture.getPictureData();
                byte[] data = pictureData.getData();

                // 添加新的图片到目标行
                int pictureIdx = workbook.addPicture(data, Workbook.PICTURE_TYPE_PNG);
                CreationHelper creationHelper = workbook.getCreationHelper();
                Drawing<?> newDrawingTarget = ((XSSFSheet)target.getSheet()).createDrawingPatriarch();
                
				ClientAnchor newAnchor = creationHelper.createClientAnchor();
				newAnchor.setCol1(col1);
				newAnchor.setRow1(row1);
				newAnchor.setCol2(col2);
				newAnchor.setRow2(row2);

				Picture newPicture = newDrawingTarget.createPicture(newAnchor, pictureIdx);
            }
        }
    }
}

请注意,上述代码是针对基于XSSF(.xlsx)格式的Excel文档进行修改。如果你使用的是HSSF(.xls)格式,则需要相应地调整代码。

希望这可以帮助你实现复制行图片的功能!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?