浏览代码

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

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() // && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum()
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()) {
createRowNoRow(cell.getRowIndex() + rowspan,cell.getRow().getSheet().getLastRowNum(),(datas.size() - 1) * rowspan);
cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan, cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan,
cell.getRow().getSheet().getLastRowNum(), (datas.size() - 1) * rowspan, true, true); 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()) { while (its.hasNext()) {
@@ -487,10 +487,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
|| text.contains(" " + NUMBER_SYMBOL); || text.contains(" " + NUMBER_SYMBOL);
} }
private void createRowNoRow(int startRow, int lastRowNum, int i1) {
}
/** /**
* 创建并返回第一个Row * 创建并返回第一个Row
* @param sheet * @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 java.util.Set;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
/** /**
* 合并单元格帮助类 * 合并单元格帮助类
*
* @author JueYue * @author JueYue
* 2015年5月9日 下午2:13:35
* 2015年5月9日 下午2:13:35
*/ */
public class MergedRegionHelper { 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) { public MergedRegionHelper(Sheet sheet) {
getAllMergedRegion(sheet); getAllMergedRegion(sheet);
@@ -31,6 +33,7 @@ public class MergedRegionHelper {
/** /**
* 根据合并输出内容,处理合并单元格事情 * 根据合并输出内容,处理合并单元格事情
*
* @param formatAsString * @param formatAsString
*/ */
private void handerMergedString(String 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)); int endRol = Integer.valueOf(strArr[1].substring(strArr[1].charAt(1) >= 65 ? 2 : 1));
mergedCache.put(startRol + "_" + startCol, 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 i = startRol; i <= endRol; i++) {
for (int j = startCol; j <= endCol; j++) { for (int j = startCol; j <= endCol; j++) {
notNeedCread.add(i + "_" + j); notNeedCread.add(i + "_" + j);
@@ -60,6 +63,7 @@ public class MergedRegionHelper {
/** /**
* 是不是需要创建这个TD * 是不是需要创建这个TD
*
* @param row * @param row
* @param col * @param col
* @return * @return
@@ -70,6 +74,7 @@ public class MergedRegionHelper {
/** /**
* 是不是合并区域 * 是不是合并区域
*
* @param row * @param row
* @param col * @param col
* @return * @return
@@ -80,6 +85,7 @@ public class MergedRegionHelper {
/** /**
* 获取合并区域 * 获取合并区域
*
* @param row * @param row
* @param col * @param col
* @return * @return
@@ -88,4 +94,26 @@ public class MergedRegionHelper {
return mergedCache.get(row + "_" + col); 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
));
}
}
}
} }

正在加载...
取消
保存