EasyPOI 导出图片存在合并单元格只填充一个单元格问题

本文介绍如何在cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil类中添加createImageCell方法,用于在指定单元格中插入图片,包括调整单元格高度、处理合并单元格和图片数据加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重写cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil
添加 createImageCell 方法

 1 public void createImageCell(Cell cell, double height, String imagePath, byte[] data) throws Exception {
 2         if(height > (double)cell.getRow().getHeight()) {
 3             cell.getRow().setHeight((short)((int)height));
 4         }
 5         //获取当前单元格所在的sheet
 6         Sheet sheet = cell.getRow().getSheet();
 7         //获取当前sheet页中的所有合并单元格信息
 8         List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
 9         //获取当前单元格的开始列号
10         int firstColumn = (short)cell.getColumnIndex();
11         //获取当前单元格的开始行号
12         int firstRow = cell.getRow().getRowNum();
13         //获取当前单元格的结束列号
14         int lastColumn = (short)(cell.getColumnIndex());
15         //获取当前单元格的结束行号
16         int lastRow = cell.getRow().getRowNum();
17         for(CellRangeAddress mergedRegion : mergedRegions){
18             //判断当前单元格是否包含合并行或和并列 当前单元格的所有行号和列号都包含在合并域内 则认为当前单元格存在合并行或和并列
19             if(cell.getColumnIndex()>=mergedRegion.getFirstColumn()
20                     && cell.getColumnIndex()<=mergedRegion.getLastColumn()
21                     && cell.getRow().getRowNum()>=mergedRegion.getFirstRow()
22                     && cell.getRow().getRowNum()<=mergedRegion.getLastRow()){
23                 //获取合并域的开始行号
24                 firstRow = mergedRegion.getFirstRow();
25                 //获取合并域的结束行号
26                 lastRow = mergedRegion.getLastRow();
27                 //获取合并域的开始列号
28                 firstColumn = mergedRegion.getFirstColumn();
29                 //获取合并域的结束列号
30                 lastColumn = mergedRegion.getLastColumn();
31                 break;
32             }
33         }
34 
35         Object anchor;
36         if(this.type.equals(ExcelType.HSSF)) {
37             anchor = new HSSFClientAnchor(0, 0, 0, 0, (short)firstColumn, firstRow, (short)(lastColumn+1), lastRow+1);
38         } else {
39             anchor = new XSSFClientAnchor(0, 0, 0, 0, (short)firstColumn, firstRow, (short)(lastColumn+1), lastRow+1);
40         }
41 
42         if(StringUtils.isNotEmpty(imagePath)) {
43             data = ImageCache.getImage(imagePath);
44         }
45 
46         if(data != null) {
47             PoiExcelGraphDataUtil.getDrawingPatriarch(cell.getSheet()).createPicture((ClientAnchor)anchor, cell.getSheet().getWorkbook().addPicture(data, this.getImageType(data)));
48         }
49 
50     }
51  

 

转载于:https://www.cnblogs.com/jia-0112/p/11385588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值