From 02a1ec76125d3ea5bdf5478b7e0c8d65ad9411ed Mon Sep 17 00:00:00 2001 From: jueyue Date: Fri, 23 Aug 2019 18:03:43 +0800 Subject: [PATCH] =?UTF-8?q?4.1=E7=89=88=E6=9C=AC=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../export/template/ExcelExportOfTemplateUtil.java | 10 ++++++---- .../excel/html/helper/MergedRegionHelper.java | 13 ++++++++++--- .../cn/afterturn/easypoi/util/PoiFunctionUtil.java | 7 ++++--- .../afterturn/easypoi/word/parse/ParseWord07.java | 3 ++- 4 files changed, 22 insertions(+), 11 deletions(-) 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 35ee86d..a713711 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 @@ -102,7 +102,8 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { //下移数据,模拟插入 sheet.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum(), shiftRows, true, true); - mergedRegionHelper.shiftRows(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), shiftRows); + mergedRegionHelper.shiftRows(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), shiftRows, + sheet.getLastRowNum() - teplateParams.getHeadingRows() - teplateParams.getHeadingStartRow()); templateSumHandler.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), shiftRows); PoiExcelTempUtil.reset(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum()); if (excelParams.size() == 0) { @@ -154,8 +155,9 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { //修复不论后面有没有数据,都应该执行的是插入操作 if (isShift && datas.size() * rowspan > 1 && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()) { int lastRowNum = cell.getRow().getSheet().getLastRowNum(); + int shiftRows = lastRowNum - cell.getRowIndex() - rowspan; cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan, lastRowNum, (datas.size() - 1) * rowspan, true, true); - mergedRegionHelper.shiftRows(cell.getSheet(), cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan); + mergedRegionHelper.shiftRows(cell.getSheet(), cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan, shiftRows); templateSumHandler.shiftRows(cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan); PoiExcelTempUtil.reset(cell.getSheet(), cell.getRowIndex() + rowspan + (datas.size() - 1) * rowspan, cell.getRow().getSheet().getLastRowNum()); } @@ -632,7 +634,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { ExcelForEachParams params; row = row.getSheet().getRow(row.getRowNum() - rowspan + 1); for (int k = 0; k < rowspan; k++) { - int ci = columnIndex; + int ci = columnIndex; short high = columns.get(0).getHeight(); int n = k; while (n > 0) { @@ -690,7 +692,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { LOGGER.error(e.getMessage(), e); } } - if(params.getCellStyle() != null){ + if (params.getCellStyle() != null) { row.getCell(ci).setCellStyle(params.getCellStyle()); } //判断这个属性是不是需要统计 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 f4dc22b..b38b6be 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 @@ -29,7 +29,7 @@ public class MergedRegionHelper { private void getAllMergedRegion(Sheet sheet) { int nums = sheet.getNumMergedRegions(); for (int i = 0; i < nums; i++) { - handlerMergedString(sheet.getMergedRegion(i), sheet.getMergedRegion(i).formatAsString()); + handlerMergedString(sheet.getMergedRegion(i), sheet.getMergedRegion(i).formatAsString(), i); } } @@ -38,7 +38,7 @@ public class MergedRegionHelper { * * @param formatAsString */ - private void handlerMergedString(CellRangeAddress cellRangeAddress, String formatAsString) { + private void handlerMergedString(CellRangeAddress cellRangeAddress, String formatAsString, int index) { String[] strArr = formatAsString.split(":"); if (strArr.length == 2) { int startCol = strArr[0].charAt(0) - 65; @@ -102,9 +102,16 @@ public class MergedRegionHelper { * @param rowIndex * @param size */ - public void shiftRows(Sheet sheet, int rowIndex, int size) { + public void shiftRows(Sheet sheet, int rowIndex, int size, int shiftRows) { Set keys = new HashSet(); keys.addAll(mergedCache.keySet()); + //删除掉原始的缓存KEY + for (String key : keys) { + String[] temp = key.split("_"); + if (Integer.parseInt(temp[0]) >= rowIndex + size && Integer.parseInt(temp[0]) <= rowIndex + size + shiftRows) { + mergedCache.remove(key); + } + } for (String key : keys) { String[] temp = key.split("_"); if (Integer.parseInt(temp[0]) >= rowIndex) { diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiFunctionUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiFunctionUtil.java index 61e29c9..f5bc850 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiFunctionUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiFunctionUtil.java @@ -16,6 +16,7 @@ package cn.afterturn.easypoi.util; import java.lang.reflect.Array; +import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Collection; @@ -151,9 +152,9 @@ public final class PoiFunctionUtil { //要求两个对象当中至少一个对象不是字符串才进行数字类型判断 if (!(first instanceof String) || !(second instanceof String)) { try { - double f = Double.parseDouble(first.toString()); - double s = Double.parseDouble(second.toString()); - return f == s; + BigDecimal f = new BigDecimal(first.toString()); + BigDecimal s = new BigDecimal(second.toString()); + return f.compareTo(s) == 0; } catch (NumberFormatException e) { //可能存在的错误,忽略继续进行 } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java index 1338099..7aff132 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java @@ -56,7 +56,8 @@ public class ParseWord07 { private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, List runIndex, Map map) throws Exception { Object obj = PoiPublicUtil.getRealValue(currentText, map); - if (obj instanceof ImageEntity) {// 如果是图片就设置为图片 + // 如果是图片就设置为图片 + if (obj instanceof ImageEntity) { currentRun.setText("", 0); ExcelMapParse.addAnImage((ImageEntity) obj, currentRun); } else {