@@ -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 { | |||