ソースを参照

插入之后合并单元格的问题

4.1.3.A
jueyue 6年前
コミット
bd89eef56e
2個のファイルの変更34行の追加10行の削除
  1. +2
    -6
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java
  2. +32
    -4
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java

+ 2
- 6
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java ファイルの表示

@@ -165,10 +165,10 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
//不论后面有没有数据,都应该执行的是插入操作
// && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()
if (isShift && datas.size() * rowspan > 1 && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()) {
createRowNoRow(cell.getRowIndex() + rowspan,cell.getRow().getSheet().getLastRowNum(),(datas.size() - 1) * rowspan);
cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan,
cell.getRow().getSheet().getLastRowNum(), (datas.size() - 1) * rowspan, true, true);
templateSumHandler.shiftRows(cell.getRowIndex(),(datas.size() - 1) * rowspan);
mergedRegionHelper.shiftRows(cell.getSheet(),cell.getRowIndex() + rowspan,(datas.size() - 1) * rowspan);
templateSumHandler.shiftRows(cell.getRowIndex() + rowspan,(datas.size() - 1) * rowspan);
}
while (its.hasNext()) {
@@ -487,10 +487,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
|| text.contains(" " + NUMBER_SYMBOL);
}
private void createRowNoRow(int startRow, int lastRowNum, int i1) {
}
/**
* 创建并返回第一个Row
* @param sheet


+ 32
- 4
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java ファイルの表示

@@ -6,17 +6,19 @@ import java.util.Map;
import java.util.Set;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
/**
* 合并单元格帮助类
*
* @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 Map<String, Integer[]> mergedCache = new HashMap<String, Integer[]>();
private Set<String> notNeedCread = new HashSet<String>();
private Set<String> notNeedCread = new HashSet<String>();
public MergedRegionHelper(Sheet sheet) {
getAllMergedRegion(sheet);
@@ -31,6 +33,7 @@ public class MergedRegionHelper {
/**
* 根据合并输出内容,处理合并单元格事情
*
* @param formatAsString
*/
private void handerMergedString(String formatAsString) {
@@ -47,7 +50,7 @@ public class MergedRegionHelper {
}
int endRol = Integer.valueOf(strArr[1].substring(strArr[1].charAt(1) >= 65 ? 2 : 1));
mergedCache.put(startRol + "_" + startCol,
new Integer[] { endRol - startRol + 1, endCol - startCol + 1 });
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);
@@ -60,6 +63,7 @@ public class MergedRegionHelper {
/**
* 是不是需要创建这个TD
*
* @param row
* @param col
* @return
@@ -70,6 +74,7 @@ public class MergedRegionHelper {
/**
* 是不是合并区域
*
* @param row
* @param col
* @return
@@ -80,6 +85,7 @@ public class MergedRegionHelper {
/**
* 获取合并区域
*
* @param row
* @param col
* @return
@@ -88,4 +94,26 @@ public class MergedRegionHelper {
return mergedCache.get(row + "_" + col);
}
/**
* 插入之后还原之前的合并单元格
*
* @param rowIndex
* @param size
*/
public void shiftRows(Sheet sheet, int rowIndex, int size) {
Set<String> keys = new HashSet<String>();
keys.addAll(mergedCache.keySet());
for (String key : keys) {
String[] temp = key.split("_");
if (Integer.parseInt(temp[0]) >= rowIndex) {
Integer[] data = mergedCache.get(key);
mergedCache.put((Integer.parseInt(temp[0]) + size) + "_" + temp[1], mergedCache.get(key));
// 还原合并单元格
sheet.addMergedRegion(new CellRangeAddress(
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
));
}
}
}
}

読み込み中…
キャンセル
保存