diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java index 6764c7e..d165983 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java @@ -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++; } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java index 5e6b52c..9df66c7 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java @@ -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(); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/HtmlToExcelService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/HtmlToExcelService.java index d6b0d53..ed03670 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/HtmlToExcelService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/HtmlToExcelService.java @@ -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); } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java index 4e44907..9b90a2e 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java @@ -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) { } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java index 70977fe..4bc7703 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java @@ -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 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 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 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); + } } }