From 5088d440393a2661e730cae3d61fb1e76b8a69ce Mon Sep 17 00:00:00 2001 From: hurui <177768073@qq.com> Date: Mon, 5 Aug 2024 10:49:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/OrderCouponController.java | 5 +- service/pom.xml | 10 - .../ExcelFillCellMergeStrategyUtils.java | 107 ---------- .../utils/MergeCellStrategyHandler.java | 186 ------------------ 4 files changed, 1 insertion(+), 307 deletions(-) delete mode 100644 service/src/main/java/com/hfkj/common/utils/ExcelFillCellMergeStrategyUtils.java delete mode 100644 service/src/main/java/com/hfkj/common/utils/MergeCellStrategyHandler.java diff --git a/order/src/main/java/com/order/controller/business/OrderCouponController.java b/order/src/main/java/com/order/controller/business/OrderCouponController.java index 0d5ef70..cb3cb98 100644 --- a/order/src/main/java/com/order/controller/business/OrderCouponController.java +++ b/order/src/main/java/com/order/controller/business/OrderCouponController.java @@ -6,10 +6,7 @@ import com.github.pagehelper.PageInfo; import com.hfkj.common.exception.ErrorCode; import com.hfkj.common.exception.ErrorHelp; import com.hfkj.common.exception.SysCode; -import com.hfkj.common.security.SessionObject; import com.hfkj.common.security.UserCenter; -import com.hfkj.common.utils.ExcelFillCellMergeStrategyUtils; -import com.hfkj.common.utils.MergeCellStrategyHandler; import com.hfkj.common.utils.ResponseMsgUtil; import com.hfkj.config.CommonSysConst; import com.hfkj.entity.BsOrderCoupon; @@ -196,7 +193,7 @@ public class OrderCouponController { EasyExcel.write(fileUrl+pathName) .head(OrderCouponModel.class) .sheet("虚拟商品订单") - .registerWriteHandler(new ExcelFillCellMergeStrategyUtils(mergeRowIndex, mergeColumnIndex)) + //.registerWriteHandler(new ExcelFillCellMergeStrategyUtils(mergeRowIndex, mergeColumnIndex)) .doWrite(orderList); return ResponseMsgUtil.success(pathName); diff --git a/service/pom.xml b/service/pom.xml index 3fdd8d9..594c1dd 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -256,15 +256,5 @@ false - - - org.apache.maven.plugins - maven-compiler-plugin - - 11 - 11 - - - diff --git a/service/src/main/java/com/hfkj/common/utils/ExcelFillCellMergeStrategyUtils.java b/service/src/main/java/com/hfkj/common/utils/ExcelFillCellMergeStrategyUtils.java deleted file mode 100644 index 440d0ae..0000000 --- a/service/src/main/java/com/hfkj/common/utils/ExcelFillCellMergeStrategyUtils.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.hfkj.common.utils; - -import com.alibaba.excel.metadata.CellData; -import com.alibaba.excel.metadata.Head; -import com.alibaba.excel.write.handler.CellWriteHandler; -import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; -import com.alibaba.excel.write.metadata.holder.WriteTableHolder; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.util.CellRangeAddress; - -import java.util.List; - -public class ExcelFillCellMergeStrategyUtils implements CellWriteHandler { - - /** - * 需要合并列的下标,从0开始 - */ - private int[] mergeColumnIndex; - /** - * 从第几行开始合并,表头下标为0 - */ - private int mergeRowIndex; - - public ExcelFillCellMergeStrategyUtils(int mergeRowIndex, int[] mergeColumnIndex) { - this.mergeRowIndex = mergeRowIndex; - this.mergeColumnIndex = mergeColumnIndex; - } - - @Override - public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) { - - } - - @Override - public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) { - - } - - @Override - public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) { - - } - - @Override - public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List list, Cell cell, Head head, Integer integer, Boolean aBoolean) { - //当前行 - int curRowIndex = cell.getRowIndex(); - //当前列 - int curColIndex = cell.getColumnIndex(); - - if (curColIndex == 0) { - Row preRow = cell.getSheet().getRow(curRowIndex - 1); - if (preRow == null) { - // 当获取不到上一行数据时,使用缓存sheet中数据 - preRow = writeSheetHolder.getCachedSheet().getRow(curRowIndex - 1); - } - if (preRow != null) { - if (cell.getStringCellValue().equals(preRow.getCell(0).getStringCellValue())) { - for (int i = 0; i < mergeColumnIndex.length; i++) { - if (curColIndex == mergeColumnIndex[i]) { - mergeWithPrevRow(writeSheetHolder, cell, i, i); - break; - } - } - } - } - } - // preRow.getCell(curColIndex); - -/* if (curRowIndex > mergeRowIndex) { - for (int i = 0; i < mergeColumnIndex.length; i++) { - if (curColIndex == mergeColumnIndex[i]) { - mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); - break; - } - } - }*/ - - } - - private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) { - Sheet sheet = writeSheetHolder.getSheet(); - List mergeRegions = sheet.getMergedRegions(); - boolean isMerged = false; - for (int i = 0; i < mergeRegions.size() && !isMerged; i++) { - CellRangeAddress cellRangeAddr = mergeRegions.get(i); - // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元 - if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) { - sheet.removeMergedRegion(i); - cellRangeAddr.setLastRow(curRowIndex); - sheet.addMergedRegion(cellRangeAddr); - isMerged = true; - } - } - // 若上一个单元格未被合并,则新增合并单元 - if (!isMerged) { - CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, - curColIndex); - sheet.addMergedRegion(cellRangeAddress); - } - - } - -} diff --git a/service/src/main/java/com/hfkj/common/utils/MergeCellStrategyHandler.java b/service/src/main/java/com/hfkj/common/utils/MergeCellStrategyHandler.java deleted file mode 100644 index 3213b2b..0000000 --- a/service/src/main/java/com/hfkj/common/utils/MergeCellStrategyHandler.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.hfkj.common.utils; - -import com.alibaba.excel.metadata.Head; -import com.alibaba.excel.write.merge.AbstractMergeStrategy; -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.util.CellRangeAddress; - -import java.util.*; - -/** - * @className: MergeCellStrategyHandler - * @author: HuRui - * @date: 2024/8/2 - **/ -public class MergeCellStrategyHandler extends AbstractMergeStrategy { - /** - * 相同列合并 - */ - private boolean alikeColumn; - - /** - * 相同行合并 - */ - private boolean alikeRow; - - /** 开始进行合并的行index */ - private int rowIndex; - - /** 跨行合并的列index */ - private Set columns; - - private int currentRowIndex = 0; - - public MergeCellStrategyHandler(boolean alikeColumn, boolean alikeRow, int rowIndex, Set columns){ - this.alikeColumn = alikeColumn; - this.alikeRow = alikeRow; - this.rowIndex = rowIndex; - this.columns = columns; - } - - /** - * 指定是否进行跨列合并单元格 - * @param alikeColumn - * @param rowIndex - */ - public MergeCellStrategyHandler(boolean alikeColumn, int rowIndex){ - this(alikeColumn, false, rowIndex, new HashSet<>()); - } - - /** - * 指定是否进行跨行合并单元格 - * @param alikeRow - * @param rowIndex - * @param columns - */ - public MergeCellStrategyHandler(boolean alikeRow, int rowIndex, Set columns){ - this(false, alikeRow, rowIndex, columns); - } - - - @Override - protected void merge(Sheet sheet, Cell cell, Head head, Integer integer) { - int rowId = cell.getRowIndex(); - currentRowIndex = rowId == currentRowIndex ? currentRowIndex : rowId; - if (rowIndex > rowId) { - return; - } - int columnId = cell.getColumnIndex(); - // 列合并 - if (alikeColumn && columnId > 0) { - String currentCellVal = this.getCellVal(cell); - Cell preCell = cell.getRow().getCell(columnId - 1); - String preCellVal = this.getCellVal(preCell); - if (null != currentCellVal && null != preCellVal && StringUtils.isNotBlank(preCellVal) && StringUtils.isNotBlank(currentCellVal)) { - // 当前单元格内容与上一个单元格内容相等,进行合并处理 - if (preCellVal.equals(currentCellVal)) { - CellRangeAddress rangeAddress = new CellRangeAddress(currentRowIndex, currentRowIndex, columnId - 1, columnId); - rangeAddress = this.findExistAddress(sheet, rangeAddress, currentCellVal); - if (null != rangeAddress) { - sheet.addMergedRegion(rangeAddress); - } - } - } - } - // 行合并 - if (alikeRow && rowIndex < rowId && columns.contains(columnId)) { - String currentCellVal = this.getCellVal(cell); - Cell preCell = sheet.getRow(rowId - 1).getCell(columnId); - String preCellVal = this.getCellVal(preCell); - if (null != currentCellVal && null != preCellVal && !preCellVal.isBlank() && !currentCellVal.isBlank()) { - // 当前单元格内容与上一行单元格内容相等,进行合并处理 - if (preCellVal.equals(currentCellVal)) { - //sheet.validateMergedRegions(); - CellRangeAddress rangeAddress = new CellRangeAddress(currentRowIndex - 1, currentRowIndex, columnId, columnId); - rangeAddress = this.findExistAddress(sheet, rangeAddress, currentCellVal); - if (null != rangeAddress) { - sheet.addMergedRegion(rangeAddress); - } - } - } - } - - } - - /** - * 合并单元格地址范围,发现存在相同的地址则进行扩容合并 - * - * @param isColumn true:跨列合并 false:跨行合并 - * @param sheet - * @param rangeAddress : - * @param currentVal 当前单元格中的值 - * @return - */ - private CellRangeAddress findExistAddress(Sheet sheet, CellRangeAddress rangeAddress, String currentVal) { - List mergedRegions = sheet.getMergedRegions(); - int existIndex = 0; - Map existIdexMap = new LinkedHashMap<>(); - if (null != mergedRegions && !mergedRegions.isEmpty()) { - //验证当前合并的单元格是否存在重复(fixme 重复问题待处理!!!) - for (CellRangeAddress mergedRegion : mergedRegions) { - if (mergedRegion.intersects(rangeAddress)) { - existIdexMap.put(existIndex, mergedRegion); - } - existIndex++; - } - } - if (existIdexMap.isEmpty()) { - return rangeAddress; - } - List existIndexList = new ArrayList<>(existIdexMap.size()); - for (Map.Entry addressEntry : existIdexMap.entrySet()) { - CellRangeAddress exist = addressEntry.getValue(); - // 自动进行单元格合并处理 - int firstRow = rangeAddress.getFirstRow(); - int lastRow = rangeAddress.getLastRow(); - int firstColumn = rangeAddress.getFirstColumn(); - int lastColumn = rangeAddress.getLastColumn(); - - int firstRow1 = exist.getFirstRow(); - int lastRow1 = exist.getLastRow(); - int firstColumn1 = exist.getFirstColumn(); - int lastColumn1 = exist.getLastColumn(); - // 跨行合并 最后一列相等, 行不相等 - if (lastRow > lastRow1 && lastColumn == lastColumn1) { - // 检查进行跨行合并的单元格是否已经存在跨列合并 - if (lastColumn > 0 && firstColumn1 != lastColumn1) { - // 获取当前单元格的前一列单元格 - String cellVal = this.getCellVal(sheet.getRow(lastRow).getCell(lastColumn - 1)); - if (null != cellVal && cellVal.equals(currentVal)) { - exist.setLastRow(lastRow); - } - } else { - exist.setLastRow(lastRow); - } - rangeAddress = exist; - existIndexList.add(addressEntry.getKey()); - } - - // 跨列合并 行相等,列不相等 - if (lastColumn > lastColumn1 && firstRow == firstRow1 ) { - exist.setLastColumn(lastColumn); - rangeAddress = exist; - existIndexList.add(addressEntry.getKey()); - } - } - // 移除已经存在且冲突的合并数据 - if (existIndexList.isEmpty()) { - rangeAddress = null; - }else { - sheet.removeMergedRegions(existIdexMap.keySet()); - } - return rangeAddress; - } - - private String getCellVal(Cell cell) { - String val = null; - try { - val = cell.getStringCellValue(); - }catch (Exception e){ - System.out.printf("读取单元格内容失败:行%d 列%d %n", (cell.getRowIndex() + 1), (cell.getColumnIndex() + 1)); - } - return val; - } -}