ZBLOG

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

要支持复制行图片,你需要在copyRow方法中进行一些修改。以下是修改后的代码示例:

private void copyRow(Row source, Row target, Workbook workbook) {
    // 遍历源行的每个单元格
    for (int i = source.getFirstCellNum(); i <= source.getLastCellNum(); i++) {
        Cell sourceCell = source.getCell(i);
        // 如果源单元格为null,则不创建新单元格
        if (sourceCell != null) {
            Cell targetCell = target.createCell(i, sourceCell.getCellType());

            // 复制单元格样式(如果需要)
            CellStyle sourceCellStyle = sourceCell.getCellStyle();
            CellStyle targetCellStyle = workbook.createCellStyle();
            targetCellStyle.cloneStyleFrom(sourceCellStyle);
            targetCell.setCellStyle(targetCellStyle);

            // 根据单元格类型复制值和图片
            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:
                    // 处理空白单元格

                    break;
                default:
                    // 默认处理

            }

            // 复制图片
            Drawing<?> drawing = targetSheet.createDrawingPatriarch();
            
            if (source instanceof XSSFSheet && drawing instanceof XSSFDrawing) {
                XSSFSheet xssfSourceSheet = (XSSFSheet)source.getSheet();
                XSSFDrawing xssfDrawing = (XSSFDrawing)drawing;
                
                // 遍历源行的每个图片
                for (POIXMLDocumentPart part : xssfSourceSheet.getRelations()) {
                    if (part instanceof XSSFPictureData) {
                        XSSFPictureData pictureData = (XSSFPictureData)part;
                        
                        byte[] pictureBytes = pictureData.getData();
                        int pictureType = pictureData.getPictureType();

                        int row1 = source.getRowNum();
                        int row2 = target.getRowNum();
                        
                        // 创建新的图片位置并绘制图片
                        XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0,
                                sourceCell.getColumnIndex(), row1, 
                                sourceCell.getColumnIndex() + 1, row2 + 1);
                        
                        int index = workbook.addPicture(pictureBytes, pictureType);
                        XSSFPicture picture = xssfDrawing.createPicture(anchor, index);
                        
                        // 设置图片大小(可根据需求调整)
                        picture.resize(1.0);
                    }
                }
            }
        }
    }
}

请注意,此示例假设您使用的是Apache POI库处理Excel文件,并且目标工作簿和工作表已正确设置。如果使用其他库或具体环境,请适当进行修改和调整。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?