diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelForEachParams.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelForEachParams.java index 8044795..c948042 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelForEachParams.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelForEachParams.java @@ -1,19 +1,20 @@ package cn.afterturn.easypoi.excel.entity.params; +import org.apache.poi.ss.usermodel.CellStyle; + import java.io.Serializable; import java.util.Stack; -import org.apache.poi.ss.usermodel.CellStyle; - /** * 模板for each是的参数 + * * @author JueYue - * 2015年4月29日 下午9:22:48 + * 2015年4月29日 下午9:22:48 */ public class ExcelForEachParams implements Serializable { /** - * + * */ private static final long serialVersionUID = 1L; /** @@ -44,8 +45,12 @@ public class ExcelForEachParams implements Serializable { * 行合并 */ private int rowspan = 1; - - private boolean needSum; + /** + * 行合并 + */ + private boolean collectCell; + + private boolean needSum; public ExcelForEachParams() { @@ -56,8 +61,8 @@ public class ExcelForEachParams implements Serializable { this.cellStyle = cellStyle; this.height = height; } - - public ExcelForEachParams(String name, CellStyle cellStyle, short height,boolean needSum) { + + public ExcelForEachParams(String name, CellStyle cellStyle, short height, boolean needSum) { this.name = name; this.cellStyle = cellStyle; this.height = height; @@ -128,4 +133,12 @@ public class ExcelForEachParams implements Serializable { public void setTempName(Stack tempName) { this.tempName = tempName; } + + public boolean isCollectCell() { + return collectCell; + } + + public void setCollectCell(boolean collectCell) { + this.collectCell = collectCell; + } } 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 261efc4..6d0aaf8 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 @@ -736,11 +736,34 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { ci = ci + params.getColspan(); } loopCi = Math.max(loopCi, ci); + // 需要把需要合并的单元格合并了 --- 不是集合的栏位合并了 + if (loopSize > 1) { + handlerLoopMergedRegion(row, columnIndex, columns, loopSize); + } row = row.getSheet().getRow(row.getRowNum() + 1); } return new int[]{loopSize, loopCi}; } + /** + * 迭代把不是集合的数据都合并了 + * + * @param row + * @param columnIndex + * @param columns + * @param loopSize + */ + private void handlerLoopMergedRegion(Row row, int columnIndex, List columns, int loopSize) { + for (int i = 0; i < columns.size(); i++) { + if (!columns.get(i).isCollectCell()) { + PoiMergeCellUtil.addMergedRegion(row.getSheet(), row.getRowNum(), + row.getRowNum() + loopSize - 1, columnIndex, + columnIndex + columns.get(i).getColspan() - 1); + } + columnIndex = columnIndex + columns.get(i).getColspan(); + } + } + private short getMaxHeight(int k, int colspan, List columns) { short high = columns.get(0).getHeight(); int n = k; @@ -789,12 +812,15 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { int[] loopArr = setForeachRowCellValue(false, tempRow, columnIndex, data, temp, map, rowspan, colspan, mergedRegionHelper); nums += loopArr[0]; - ci = Math.max(ci,loopArr[1]); + ci = Math.max(ci, loopArr[1]); map.remove("loop_" + columnIndex); tempRow = createRow(tempRow.getRowNum() + loopArr[0], row.getSheet(), false, rowspan); } for (int i = 0; i < temp.size(); i++) { temp.get(i).setName(temp.get(i).getTempName().pop()); + //都是集合 + temp.get(i).setCollectCell(true); + } return new int[]{nums, temp.size(), ci}; } @@ -810,11 +836,14 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { private List getLoopEachParams(List columns, int columnIndex, String collectName) { List temp = new ArrayList<>(); for (int i = 0; i < columns.size(); i++) { + //先置为不是集合 + columns.get(i).setCollectCell(false); if (columns.get(i) == null || columns.get(i).getName().contains(collectName)) { temp.add(columns.get(i)); if (columns.get(i).getTempName() == null) { columns.get(i).setTempName(new Stack<>()); } + columns.get(i).setCollectCell(true); columns.get(i).getTempName().push(columns.get(i).getName()); columns.get(i).setName(columns.get(i).getName().replace(collectName, "loop_" + columnIndex)); }