首页 > 其他 > 详细

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

时间:2019-08-20 21:48:00      阅读:459      评论:0      收藏:0      [点我收藏+]

重写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  

 

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

原文:https://www.cnblogs.com/jia-0112/p/11385588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!