diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java index b70b7ef..5e6b52c 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java @@ -165,10 +165,10 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { //不论后面有没有数据,都应该执行的是插入操作 // && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum() if (isShift && datas.size() * rowspan > 1 && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()) { - createRowNoRow(cell.getRowIndex() + rowspan,cell.getRow().getSheet().getLastRowNum(),(datas.size() - 1) * rowspan); cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan, cell.getRow().getSheet().getLastRowNum(), (datas.size() - 1) * rowspan, true, true); - templateSumHandler.shiftRows(cell.getRowIndex(),(datas.size() - 1) * rowspan); + mergedRegionHelper.shiftRows(cell.getSheet(),cell.getRowIndex() + rowspan,(datas.size() - 1) * rowspan); + templateSumHandler.shiftRows(cell.getRowIndex() + rowspan,(datas.size() - 1) * rowspan); } while (its.hasNext()) { @@ -487,10 +487,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { || text.contains(" " + NUMBER_SYMBOL); } - private void createRowNoRow(int startRow, int lastRowNum, int i1) { - - } - /** * 创建并返回第一个Row * @param sheet diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java index dba8400..8a52d78 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java @@ -6,17 +6,19 @@ import java.util.Map; import java.util.Set; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; /** * 合并单元格帮助类 + * * @author JueYue - * 2015年5月9日 下午2:13:35 + * 2015年5月9日 下午2:13:35 */ public class MergedRegionHelper { - private Map mergedCache = new HashMap(); + private Map mergedCache = new HashMap(); - private Set notNeedCread = new HashSet(); + private Set notNeedCread = new HashSet(); public MergedRegionHelper(Sheet sheet) { getAllMergedRegion(sheet); @@ -31,6 +33,7 @@ public class MergedRegionHelper { /** * 根据合并输出内容,处理合并单元格事情 + * * @param formatAsString */ private void handerMergedString(String formatAsString) { @@ -47,7 +50,7 @@ public class MergedRegionHelper { } int endRol = Integer.valueOf(strArr[1].substring(strArr[1].charAt(1) >= 65 ? 2 : 1)); mergedCache.put(startRol + "_" + startCol, - new Integer[] { endRol - startRol + 1, endCol - startCol + 1 }); + new Integer[]{endRol - startRol + 1, endCol - startCol + 1}); for (int i = startRol; i <= endRol; i++) { for (int j = startCol; j <= endCol; j++) { notNeedCread.add(i + "_" + j); @@ -60,6 +63,7 @@ public class MergedRegionHelper { /** * 是不是需要创建这个TD + * * @param row * @param col * @return @@ -70,6 +74,7 @@ public class MergedRegionHelper { /** * 是不是合并区域 + * * @param row * @param col * @return @@ -80,6 +85,7 @@ public class MergedRegionHelper { /** * 获取合并区域 + * * @param row * @param col * @return @@ -88,4 +94,26 @@ public class MergedRegionHelper { return mergedCache.get(row + "_" + col); } + /** + * 插入之后还原之前的合并单元格 + * + * @param rowIndex + * @param size + */ + public void shiftRows(Sheet sheet, int rowIndex, int size) { + Set keys = new HashSet(); + keys.addAll(mergedCache.keySet()); + for (String key : keys) { + String[] temp = key.split("_"); + if (Integer.parseInt(temp[0]) >= rowIndex) { + Integer[] data = mergedCache.get(key); + mergedCache.put((Integer.parseInt(temp[0]) + size) + "_" + temp[1], mergedCache.get(key)); + // 还原合并单元格 + sheet.addMergedRegion(new CellRangeAddress( + Integer.parseInt(temp[0]) + size - 1, Integer.parseInt(temp[0]) + data[0] + size - 2, + Integer.parseInt(temp[1]), Integer.parseInt(temp[1]) + data[1] - 1 + )); + } + } + } }