EasyPOI 導出圖片存在合並單元格只填充一個單元格問題


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM