Pārlūkot izejas kodu

修改会下移合并问题

4.1.3.A
jueyue pirms 6 gadiem
vecāks
revīzija
ddd77a6969
2 mainītis faili ar 25 papildinājumiem un 46 dzēšanām
  1. +3
    -8
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java
  2. +22
    -38
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java

+ 3
- 8
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java Parādīt failu

@@ -147,14 +147,12 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
rowspan, colspan, mergedRegionHelper);
rowIndex += rowspan - 1;
}
//不论后面有没有数据,都应该执行的是插入操作
// && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()
//修复不论后面有没有数据,都应该执行的是插入操作
if (isShift && datas.size() * rowspan > 1 && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()) {
cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan,
cell.getRow().getSheet().getLastRowNum(), (datas.size() - 1) * rowspan, true, true);
int lastRowNum = cell.getRow().getSheet().getLastRowNum();
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);
templateSumHandler.shiftRows(cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan);
}
while (its.hasNext()) {
Object t = its.next();
@@ -402,9 +400,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
//修改需要处理的统计值
handlerSumCell(sheet);
//修复因为调用shiftRows而被破坏的合并单元格
mergedRegionHelper.mergeOtherCell(sheet);
}
private void handlerSumCell(Sheet sheet) {


+ 22
- 38
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java Parādīt failu

@@ -1,26 +1,26 @@
package cn.afterturn.easypoi.excel.html.helper;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import cn.afterturn.easypoi.util.PoiCellUtil;
import cn.afterturn.easypoi.util.PoiMergeCellUtil;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* 合并单元格帮助类
*
* @author JueYue
* 2015年5月9日 下午2:13:35
* 2015年5月9日 下午2:13:35
*/
public class MergedRegionHelper {
private Map<String, Integer[]> mergedCache = new HashMap<String, Integer[]>();
private Set<String> notNeedCread = new HashSet<String>();
private Set<String> notNeedCache = new HashSet<String>();
public MergedRegionHelper(Sheet sheet) {
getAllMergedRegion(sheet);
@@ -29,7 +29,7 @@ public class MergedRegionHelper {
private void getAllMergedRegion(Sheet sheet) {
int nums = sheet.getNumMergedRegions();
for (int i = 0; i < nums; i++) {
handerMergedString(sheet.getMergedRegion(i).formatAsString());
handlerMergedString(sheet.getMergedRegion(i), sheet.getMergedRegion(i).formatAsString());
}
}
@@ -38,7 +38,7 @@ public class MergedRegionHelper {
*
* @param formatAsString
*/
private void handerMergedString(String formatAsString) {
private void handlerMergedString(CellRangeAddress cellRangeAddress, String formatAsString) {
String[] strArr = formatAsString.split(":");
if (strArr.length == 2) {
int startCol = strArr[0].charAt(0) - 65;
@@ -46,7 +46,7 @@ public class MergedRegionHelper {
startCol = (startCol + 1) * 26 + (strArr[0].charAt(1) - 65);
}
int startRol = Integer.valueOf(strArr[0].substring(strArr[0].charAt(1) >= 65 ? 2 : 1));
int endCol = strArr[1].charAt(0) - 65;
int endCol = strArr[1].charAt(0) - 65;
if (strArr[1].charAt(1) >= 65) {
endCol = (endCol + 1) * 26 + (strArr[1].charAt(1) - 65);
}
@@ -55,10 +55,10 @@ public class MergedRegionHelper {
new Integer[]{endRol - startRol + 1, endCol - startCol + 1});
for (int i = startRol; i <= endRol; i++) {
for (int j = startCol; j <= endCol; j++) {
notNeedCread.add(i + "_" + j);
notNeedCache.add(i + "_" + j);
}
}
notNeedCread.remove(startRol + "_" + startCol);
notNeedCache.remove(startRol + "_" + startCol);
}
}
@@ -71,7 +71,7 @@ public class MergedRegionHelper {
* @return
*/
public boolean isNeedCreate(int row, int col) {
return !notNeedCread.contains(row + "_" + col);
return !notNeedCache.contains(row + "_" + col);
}
/**
@@ -108,16 +108,18 @@ public class MergedRegionHelper {
for (String key : keys) {
String[] temp = key.split("_");
if (Integer.parseInt(temp[0]) >= rowIndex) {
Integer[] data = mergedCache.get(key);
String newKey = (Integer.parseInt(temp[0]) + size) + "_" + temp[1];
if(!mergedCache.containsKey(newKey)){
Integer[] data = mergedCache.get(key);
String newKey = (Integer.parseInt(temp[0]) + size) + "_" + temp[1];
if (!mergedCache.containsKey(newKey)) {
mergedCache.put(newKey, mergedCache.get(key));
try {
// 还原合并单元格
PoiMergeCellUtil.addMergedRegion(sheet,
Integer.parseInt(temp[0]) + size - 1, Integer.parseInt(temp[0]) + data[0] + size - 2,
Integer.parseInt(temp[1]), Integer.parseInt(temp[1]) + data[1] - 1
);
if (!PoiCellUtil.isMergedRegion(sheet, Integer.parseInt(temp[0]) + size - 1, Integer.parseInt(temp[1]))) {
PoiMergeCellUtil.addMergedRegion(sheet,
Integer.parseInt(temp[0]) + size - 1, Integer.parseInt(temp[0]) + data[0] + size - 2,
Integer.parseInt(temp[1]), Integer.parseInt(temp[1]) + data[1] - 1
);
}
} catch (Exception e) {
}
}
@@ -125,22 +127,4 @@ public class MergedRegionHelper {
}
}
/**
* 把破坏的单元格合并(POI的shiftRows方法会把移动的行的合并单元格拆分)
* @return
*/
public void mergeOtherCell(Sheet sheet) {
Set<String> tempMergeKeySet = mergedCache.keySet();
for(String mergeKey : tempMergeKeySet) {
String[] row_col = mergeKey.split("_");
if(!PoiCellUtil.isMergedRegion(sheet, Integer.valueOf(row_col[0]) - 1, Integer.valueOf(row_col[1]))) {
Integer[] mergeCellValue = mergedCache.get(mergeKey);
sheet.addMergedRegion(new CellRangeAddress(Integer.valueOf(row_col[0]) - 1,
Integer.valueOf(row_col[0]) - 1 + mergeCellValue[0] - 1, Integer.valueOf(row_col[1]),
Integer.valueOf(row_col[1]) + mergeCellValue[1] - 1));
}
}
}
}

Notiek ielāde…
Atcelt
Saglabāt