lyhzzz 2 年之前
父节点
当前提交
9e53da5244
共有 1 个文件被更改,包括 30 次插入23 次删除
  1. 30 23
      src/main/java/com/fdkankan/sale/util/ExcelFillCellMergeStrategy.java

+ 30 - 23
src/main/java/com/fdkankan/sale/util/ExcelFillCellMergeStrategy.java

@@ -5,6 +5,7 @@ import com.alibaba.excel.metadata.data.WriteCellData;
 import com.alibaba.excel.write.handler.CellWriteHandler;
 import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
 import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
@@ -14,6 +15,7 @@ import org.apache.poi.ss.util.CellRangeAddress;
 
 import java.util.List;
 
+@Slf4j
 public class ExcelFillCellMergeStrategy implements CellWriteHandler {
     /**
      * 要合并的列
@@ -106,32 +108,37 @@ public class ExcelFillCellMergeStrategy implements CellWriteHandler {
      * @param curColIndex      当前列
      */
     private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
-        //获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
-        final Object curData = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
-        final Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
-        final Object preData = preCell.getCellType() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
-
-        // 比较当前行的单元格与上一行是否相同,相同合并当前单元格与上一行
-        if (curData.equals(preData)) {
-            final Sheet sheet = writeSheetHolder.getSheet();
-            final List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
-            boolean isMerged = false;
-            for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
-                final CellRangeAddress cellRangeAddr = mergeRegions.get(i);
-                // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
-                if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
-                    sheet.removeMergedRegion(i);
-                    cellRangeAddr.setLastRow(curRowIndex);
-                    sheet.addMergedRegion(cellRangeAddr);
-                    isMerged = true;
+        try {
+            //获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
+            final Object curData = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
+            final Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
+            final Object preData = preCell.getCellType() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
+
+            // 比较当前行的单元格与上一行是否相同,相同合并当前单元格与上一行
+            if (curData.equals(preData)) {
+                final Sheet sheet = writeSheetHolder.getSheet();
+                final List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
+                boolean isMerged = false;
+                for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
+                    final CellRangeAddress cellRangeAddr = mergeRegions.get(i);
+                    // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
+                    if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
+                        sheet.removeMergedRegion(i);
+                        cellRangeAddr.setLastRow(curRowIndex);
+                        sheet.addMergedRegion(cellRangeAddr);
+                        isMerged = true;
+                    }
+                }
+                // 若上一个单元格未被合并,则新增合并单元
+                if (!isMerged) {
+                    final CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
+                    sheet.addMergedRegion(cellRangeAddress);
                 }
             }
-            // 若上一个单元格未被合并,则新增合并单元
-            if (!isMerged) {
-                final CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
-                sheet.addMergedRegion(cellRangeAddress);
-            }
+        }catch (Exception e){
+            log.error("合并单元格error:",e);
         }
+
     }
 
     /**