Ver a proveniência

合并单元格异常吞没

4.1.3.A
jueyue há 6 anos
ascendente
cometimento
2e2b0315b3
5 ficheiros alterados com 44 adições e 32 eliminações
  1. +1
    -2
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java
  2. +5
    -9
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java
  3. +2
    -1
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/HtmlToExcelService.java
  4. +3
    -2
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java
  5. +33
    -18
      easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java

+ 1
- 2
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java Ver ficheiro

@@ -136,8 +136,7 @@ public abstract class BaseExportService extends ExportCommonService {
sheet.getRow(i).createCell(cellNum);
sheet.getRow(i).getCell(cellNum).setCellStyle(getStyles(false, entity));
}
sheet.addMergedRegion(
new CellRangeAddress(index, index + maxHeight - 1, cellNum, cellNum));
PoiMergeCellUtil.addMergedRegion(sheet,index, index + maxHeight - 1, cellNum, cellNum);
cellNum++;
}
}


+ 5
- 9
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java Ver ficheiro

@@ -28,6 +28,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import cn.afterturn.easypoi.util.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
@@ -53,10 +54,6 @@ import cn.afterturn.easypoi.excel.export.template.TemplateSumHandler.TemplateSum
import cn.afterturn.easypoi.excel.html.helper.MergedRegionHelper;
import cn.afterturn.easypoi.exception.excel.ExcelExportException;
import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum;
import cn.afterturn.easypoi.util.PoiCellUtil;
import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil;
import cn.afterturn.easypoi.util.PoiPublicUtil;
import cn.afterturn.easypoi.util.PoiSheetUtil;
/**
* Excel 导出根据模板导出
@@ -464,8 +461,8 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
cell.setCellValue("");
if (img.getRowspan()>1 || img.getColspan() > 1){
img.setHeight(0);
cell.getSheet().addMergedRegion(new CellRangeAddress(cell.getRowIndex(),
cell.getRowIndex() + img.getRowspan() - 1, cell.getColumnIndex(), cell.getColumnIndex() + img.getColspan() -1));
PoiMergeCellUtil.addMergedRegion(cell.getSheet(),cell.getRowIndex(),
cell.getRowIndex() + img.getRowspan() - 1, cell.getColumnIndex(), cell.getColumnIndex() + img.getColspan() -1);
}
createImageCell(cell,img.getHeight(),img.getUrl(),img.getData());
}else if (isNumber && StringUtils.isNotBlank(obj.toString())) {
@@ -601,10 +598,9 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService {
//合并对应单元格
if ((params.getRowspan() != 1 || params.getColspan() != 1)
&& !mergedRegionHelper.isMergedRegion(row.getRowNum() + 1, ci)) {
row.getSheet()
.addMergedRegion(new CellRangeAddress(row.getRowNum(),
PoiMergeCellUtil.addMergedRegion(row.getSheet(), row.getRowNum(),
row.getRowNum() + params.getRowspan() - 1, ci,
ci + params.getColspan() - 1));
ci + params.getColspan() - 1);
}
ci = ci + params.getColspan();
}


+ 2
- 1
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/HtmlToExcelService.java Ver ficheiro

@@ -3,6 +3,7 @@ package cn.afterturn.easypoi.excel.html;
import java.util.Map;
import java.util.List;

import cn.afterturn.easypoi.util.PoiMergeCellUtil;
import org.jsoup.Jsoup;

import org.slf4j.Logger;
@@ -269,6 +270,6 @@ public class HtmlToExcelService {
private void mergeRegion(int firstRow, int lastRow, int firstCol, int lastCol) {
LOGGER.debug("Merge Region, From Row [{}], To [{}].", firstRow, lastRow);
LOGGER.debug("From Col [{}], To [{}].", firstCol, lastCol);
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
PoiMergeCellUtil.addMergedRegion(sheet,firstRow, lastRow, firstCol, lastCol);
}
}

+ 3
- 2
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java Ver ficheiro

@@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import cn.afterturn.easypoi.util.PoiMergeCellUtil;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
@@ -112,10 +113,10 @@ public class MergedRegionHelper {
mergedCache.put(newKey, mergedCache.get(key));
try {
// 还原合并单元格
sheet.addMergedRegion(new CellRangeAddress(
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) {
}
}


+ 33
- 18
easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java Ver ficheiro

@@ -14,14 +14,19 @@ import org.apache.poi.ss.util.CellRangeAddress;
import cn.afterturn.easypoi.excel.entity.params.MergeEntity;
import cn.afterturn.easypoi.exception.excel.ExcelExportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 纵向合并单元格工具类
*
* @author JueYue
* 2015年6月21日 上午11:21:40
* 2015年6月21日 上午11:21:40
*/
public final class PoiMergeCellUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(PoiMergeCellUtil.class);
private PoiMergeCellUtil() {
}
@@ -30,7 +35,7 @@ public final class PoiMergeCellUtil {
*
* @param sheet
* @param startRow 开始行
* @param columns 需要处理的列
* @param columns 需要处理的列
*/
public static void mergeCells(Sheet sheet, int startRow, Integer... columns) {
if (columns == null) {
@@ -60,7 +65,7 @@ public final class PoiMergeCellUtil {
* @param sheet
* @param mergeMap key--列,value--依赖的列,没有传空
* @param startRow 开始行
* @param endRow 结束行
* @param endRow 结束行
*/
public static void mergeCells(Sheet sheet, Map<Integer, int[]> mergeMap, int startRow,
int endRow) {
@@ -84,8 +89,8 @@ public final class PoiMergeCellUtil {
} else {
text = row.getCell(index).getStringCellValue();
if (StringUtils.isNotEmpty(text)) {
hanlderMergeCells(index, i, text, mergeDataMap, sheet, row.getCell(index),
mergeMap.get(index));
handlerMergeCells(index, i, text, mergeDataMap, sheet, row.getCell(index),
mergeMap.get(index));
} else {
mergeCellOrContinue(index, mergeDataMap, sheet);
}
@@ -94,9 +99,9 @@ public final class PoiMergeCellUtil {
}
if (mergeDataMap.size() > 0) {
for (Integer index : mergeDataMap.keySet()) {
if(mergeDataMap.get(index).getEndRow() > mergeDataMap.get(index).getStartRow()) {
sheet.addMergedRegion(new CellRangeAddress(mergeDataMap.get(index).getStartRow(),
mergeDataMap.get(index).getEndRow(), index, index));
if (mergeDataMap.get(index).getEndRow() > mergeDataMap.get(index).getStartRow()) {
PoiMergeCellUtil.addMergedRegion(sheet,mergeDataMap.get(index).getStartRow(),
mergeDataMap.get(index).getEndRow(), index, index);
}
}
}
@@ -114,16 +119,16 @@ public final class PoiMergeCellUtil {
* @param cell
* @param delys
*/
private static void hanlderMergeCells(Integer index, int rowNum, String text,
private static void handlerMergeCells(Integer index, int rowNum, String text,
Map<Integer, MergeEntity> mergeDataMap, Sheet sheet,
Cell cell, int[] delys) {
if (mergeDataMap.containsKey(index)) {
if (checkIsEqualByCellContents(mergeDataMap.get(index), text, cell, delys, rowNum)) {
mergeDataMap.get(index).setEndRow(rowNum);
} else {
if(mergeDataMap.get(index).getEndRow() > mergeDataMap.get(index).getStartRow()){
sheet.addMergedRegion(new CellRangeAddress(mergeDataMap.get(index).getStartRow(),
mergeDataMap.get(index).getEndRow(), index, index));
if (mergeDataMap.get(index).getEndRow() > mergeDataMap.get(index).getStartRow()) {
PoiMergeCellUtil.addMergedRegion(sheet,mergeDataMap.get(index).getStartRow(),
mergeDataMap.get(index).getEndRow(), index, index);
}
mergeDataMap.put(index, createMergeEntity(text, rowNum, cell, delys));
}
@@ -142,10 +147,10 @@ public final class PoiMergeCellUtil {
private static void mergeCellOrContinue(Integer index, Map<Integer, MergeEntity> mergeDataMap,
Sheet sheet) {
if (mergeDataMap.containsKey(index)
&& mergeDataMap.get(index).getEndRow() != mergeDataMap.get(index).getStartRow()) {
&& mergeDataMap.get(index).getEndRow() != mergeDataMap.get(index).getStartRow()) {
try {
sheet.addMergedRegion(new CellRangeAddress(mergeDataMap.get(index).getStartRow(),
mergeDataMap.get(index).getEndRow(), index, index));
PoiMergeCellUtil.addMergedRegion(sheet,mergeDataMap.get(index).getStartRow(),
mergeDataMap.get(index).getEndRow(), index, index);
} catch (Exception e) {
}
@@ -176,7 +181,7 @@ public final class PoiMergeCellUtil {
if (mergeEntity.getText().equals(text)) {
for (int i = 0; i < delys.length; i++) {
if (mergeEntity.getRelyList().get(i) == null || !mergeEntity.getRelyList().get(i)
.equals(getCellNotNullText(cell, delys[i], rowNum))) {
.equals(getCellNotNullText(cell, delys[i], rowNum))) {
return false;
}
}
@@ -198,11 +203,21 @@ public final class PoiMergeCellUtil {
return null;
}
if (cell.getRow().getCell(index) != null
&& StringUtils.isNotEmpty(cell.getRow().getCell(index).getStringCellValue())) {
&& StringUtils.isNotEmpty(cell.getRow().getCell(index).getStringCellValue())) {
return cell.getRow().getCell(index).getStringCellValue();
}
return getCellNotNullText(cell.getRow().getSheet().getRow(--rowNum).getCell(index), index,
rowNum);
rowNum);
}
public static void addMergedRegion(Sheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {
try {
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
} catch (Exception e) {
// 忽略掉合并的错误,不打印异常
LOGGER.debug(e.getMessage(), e);
}
}
}

Carregando…
Cancelar
Guardar