| @@ -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()); | |||
| } | |||
| //判断这个属性是不是需要统计 | |||
| @@ -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<String> keys = new HashSet<String>(); | |||
| 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) { | |||
| @@ -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) { | |||
| //可能存在的错误,忽略继续进行 | |||
| } | |||
| @@ -56,7 +56,8 @@ public class ParseWord07 { | |||
| private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, | |||
| List<Integer> runIndex, Map<String, Object> 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 { | |||