From b24463a726f070fdea21c7bcb409547b80511d10 Mon Sep 17 00:00:00 2001 From: linfso Date: Sun, 28 Jul 2024 17:57:12 +0800 Subject: [PATCH] md --- .../ExcelFillCellMergePrevColUtils.java | 69 ----------- .../ExcelFillCellMergeStrategyUtils.java | 110 ------------------ .../emis/service/billexport/ExcelUtils.java | 45 ------- 3 files changed, 224 deletions(-) delete mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergePrevColUtils.java delete mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergeStrategyUtils.java diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergePrevColUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergePrevColUtils.java deleted file mode 100644 index 63d69f4db..000000000 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergePrevColUtils.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.xdadan.erp.emis.service.billexport; - -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.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.util.CellRangeAddress; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 列合并工具类 - * - * @author DaiHaijiao - */ -public class ExcelFillCellMergePrevColUtils implements CellWriteHandler { - private static final String KEY = "%s-%s"; - //所有的合并信息都存在了这个map里面 - Map mergeInfo = new HashMap<>(); - - public ExcelFillCellMergePrevColUtils() { - } - - @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(); -// -// Integer num = mergeInfo.get(String.format(KEY, curRowIndex, curColIndex)); -// if (null != num) { -// // 合并最后一行 ,列 -// this.mergeWithPrevCol(writeSheetHolder, cell, curRowIndex, curColIndex, num); -// } -// } - - public void mergeWithPrevCol(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex, int num) { - Sheet sheet = writeSheetHolder.getSheet(); - CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex, curRowIndex, curColIndex, curColIndex + num); - sheet.addMergedRegion(cellRangeAddress); - } - - //num从第几列开始增加多少列,(6,2,7)代表的意思就是第6行的第2列至第2+7也就是9列开始合并 - public void add(int curRowIndex, int curColIndex, int num) { - mergeInfo.put(String.format(KEY, curRowIndex, curColIndex), num); - } - -} \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergeStrategyUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergeStrategyUtils.java deleted file mode 100644 index e6daa2bac..000000000 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelFillCellMergeStrategyUtils.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.xdadan.erp.emis.service.billexport; - - -import com.alibaba.excel.metadata.Head; -import com.alibaba.excel.metadata.data.CellData; -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; - -/** - * 行合并工具类 - * - * @author DaiHaijiao - */ -public class ExcelFillCellMergeStrategyUtils implements CellWriteHandler { - - /** - * 合并字段的下标 - */ - private int[] mergeColumnIndex; - /** - * 合并几行 - */ - 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 (curRowIndex > mergeRowIndex) { -// for (int i = 0; i < mergeColumnIndex.length; i++) { -// if (curColIndex == mergeColumnIndex[i]) { -// this.mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex); -// break; -// } -// } -// } -// } - - private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) { - //获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并 - //获取当前行的第一列 - Cell firstNowCell = cell.getSheet().getRow(curRowIndex).getCell(curColIndex); - Object curData = firstNowCell.getCellTypeEnum() == CellType.STRING ? firstNowCell.getStringCellValue() : firstNowCell.getNumericCellValue(); - Row preRow = cell.getSheet().getRow(curRowIndex - 1); - if (preRow == null) { - // 当获取不到上一行数据时,使用缓存sheet中数据 - preRow = writeSheetHolder.getCachedSheet().getRow(curRowIndex - 1); - } - Cell preCell = preRow.getCell(curColIndex); - Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue(); - // 比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行 - if (curData.equals(preData)) { - 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); - } - } - } -} \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java index 9450d7dbc..2d58cf1d7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/billexport/ExcelUtils.java @@ -24,51 +24,6 @@ import java.util.*; public class ExcelUtils { - public static void exportTplFile(HttpServletResponse response, String excelPath, String fileName, Map outerMap, List> innerMapList, - ExcelFillCellMergePrevColUtils excelFillCellMergePrevColUtils, ExcelFillCellMergeStrategyUtils excelFillCellMergeStrategyUtils) throws IOException { - - OutputStream fos=response.getOutputStream(); - InputStream fis = new ClassPathResource(excelPath).getInputStream(); - exportToTemplate(fos, fis, outerMap, innerMapList, - excelFillCellMergePrevColUtils, excelFillCellMergeStrategyUtils); - - } - - public static void exportTplFileLocal(String outFile, String tplFile, Map outerMap, List> innerMapList, - ExcelFillCellMergePrevColUtils excelFillCellMergePrevColUtils, ExcelFillCellMergeStrategyUtils excelFillCellMergeStrategyUtils) throws IOException { - - FileOutputStream fos=new FileOutputStream(outFile); - InputStream fis = new FileInputStream(tplFile); - - exportToTemplate(fos, fis,outerMap, innerMapList, - excelFillCellMergePrevColUtils, excelFillCellMergeStrategyUtils); - - } - - public static void exportToTemplate(OutputStream fos, InputStream fis, Map outerMap, List> innerMapList, - ExcelFillCellMergePrevColUtils excelFillCellMergePrevColUtils, ExcelFillCellMergeStrategyUtils excelFillCellMergeStrategyUtils) throws IOException { -// InputStream inputStream = new ClassPathResource(excelPath).getInputStream(); -// response.setContentType("application/vnd.ms-excel"); -// response.setCharacterEncoding("utf-8"); -// String fileOutFileName = URLEncoder.encode(fileName, "UTF-8"); -// response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); - ExcelWriter excelWriter = EasyExcel.write(fos) - .withTemplate(fis) - .registerWriteHandler(excelFillCellMergePrevColUtils) - .registerWriteHandler(excelFillCellMergeStrategyUtils) - .build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); - if (null != innerMapList && innerMapList.size() > 0) { - FillWrapper listWrapper = new FillWrapper("list", innerMapList); - excelWriter.fill(listWrapper, fillConfig, writeSheet); - } - if (null != outerMap && outerMap.size() > 0) { - excelWriter.fill(outerMap, writeSheet); - } - excelWriter.finish(); - } - /** * 验证并获取excel单元格内的值 *