@@ -102,7 +102,8 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||||
//下移数据,模拟插入 | //下移数据,模拟插入 | ||||
sheet.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), | sheet.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), | ||||
sheet.getLastRowNum(), shiftRows, true, true); | 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); | templateSumHandler.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), shiftRows); | ||||
PoiExcelTempUtil.reset(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum()); | PoiExcelTempUtil.reset(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum()); | ||||
if (excelParams.size() == 0) { | 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()) { | if (isShift && datas.size() * rowspan > 1 && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()) { | ||||
int lastRowNum = 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); | 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); | templateSumHandler.shiftRows(cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan); | ||||
PoiExcelTempUtil.reset(cell.getSheet(), cell.getRowIndex() + rowspan + (datas.size() - 1) * rowspan, cell.getRow().getSheet().getLastRowNum()); | 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; | ExcelForEachParams params; | ||||
row = row.getSheet().getRow(row.getRowNum() - rowspan + 1); | row = row.getSheet().getRow(row.getRowNum() - rowspan + 1); | ||||
for (int k = 0; k < rowspan; k++) { | for (int k = 0; k < rowspan; k++) { | ||||
int ci = columnIndex; | |||||
int ci = columnIndex; | |||||
short high = columns.get(0).getHeight(); | short high = columns.get(0).getHeight(); | ||||
int n = k; | int n = k; | ||||
while (n > 0) { | while (n > 0) { | ||||
@@ -690,7 +692,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { | |||||
LOGGER.error(e.getMessage(), e); | LOGGER.error(e.getMessage(), e); | ||||
} | } | ||||
} | } | ||||
if(params.getCellStyle() != null){ | |||||
if (params.getCellStyle() != null) { | |||||
row.getCell(ci).setCellStyle(params.getCellStyle()); | row.getCell(ci).setCellStyle(params.getCellStyle()); | ||||
} | } | ||||
//判断这个属性是不是需要统计 | //判断这个属性是不是需要统计 | ||||
@@ -29,7 +29,7 @@ public class MergedRegionHelper { | |||||
private void getAllMergedRegion(Sheet sheet) { | private void getAllMergedRegion(Sheet sheet) { | ||||
int nums = sheet.getNumMergedRegions(); | int nums = sheet.getNumMergedRegions(); | ||||
for (int i = 0; i < nums; i++) { | 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 | * @param formatAsString | ||||
*/ | */ | ||||
private void handlerMergedString(CellRangeAddress cellRangeAddress, String formatAsString) { | |||||
private void handlerMergedString(CellRangeAddress cellRangeAddress, String formatAsString, int index) { | |||||
String[] strArr = formatAsString.split(":"); | String[] strArr = formatAsString.split(":"); | ||||
if (strArr.length == 2) { | if (strArr.length == 2) { | ||||
int startCol = strArr[0].charAt(0) - 65; | int startCol = strArr[0].charAt(0) - 65; | ||||
@@ -102,9 +102,16 @@ public class MergedRegionHelper { | |||||
* @param rowIndex | * @param rowIndex | ||||
* @param size | * @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>(); | Set<String> keys = new HashSet<String>(); | ||||
keys.addAll(mergedCache.keySet()); | 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) { | for (String key : keys) { | ||||
String[] temp = key.split("_"); | String[] temp = key.split("_"); | ||||
if (Integer.parseInt(temp[0]) >= rowIndex) { | if (Integer.parseInt(temp[0]) >= rowIndex) { | ||||
@@ -16,6 +16,7 @@ | |||||
package cn.afterturn.easypoi.util; | package cn.afterturn.easypoi.util; | ||||
import java.lang.reflect.Array; | import java.lang.reflect.Array; | ||||
import java.math.BigDecimal; | |||||
import java.text.DecimalFormat; | import java.text.DecimalFormat; | ||||
import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
import java.util.Collection; | import java.util.Collection; | ||||
@@ -151,9 +152,9 @@ public final class PoiFunctionUtil { | |||||
//要求两个对象当中至少一个对象不是字符串才进行数字类型判断 | //要求两个对象当中至少一个对象不是字符串才进行数字类型判断 | ||||
if (!(first instanceof String) || !(second instanceof String)) { | if (!(first instanceof String) || !(second instanceof String)) { | ||||
try { | 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) { | } catch (NumberFormatException e) { | ||||
//可能存在的错误,忽略继续进行 | //可能存在的错误,忽略继续进行 | ||||
} | } | ||||
@@ -56,7 +56,8 @@ public class ParseWord07 { | |||||
private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, | private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, | ||||
List<Integer> runIndex, Map<String, Object> map) throws Exception { | List<Integer> runIndex, Map<String, Object> map) throws Exception { | ||||
Object obj = PoiPublicUtil.getRealValue(currentText, map); | Object obj = PoiPublicUtil.getRealValue(currentText, map); | ||||
if (obj instanceof ImageEntity) {// 如果是图片就设置为图片 | |||||
// 如果是图片就设置为图片 | |||||
if (obj instanceof ImageEntity) { | |||||
currentRun.setText("", 0); | currentRun.setText("", 0); | ||||
ExcelMapParse.addAnImage((ImageEntity) obj, currentRun); | ExcelMapParse.addAnImage((ImageEntity) obj, currentRun); | ||||
} else { | } else { | ||||