From cce398a57feb3e81f2adf0d70369f26e72622ac4 Mon Sep 17 00:00:00 2001 From: jueyue Date: Sat, 15 Aug 2015 22:58:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=A4=9Ash?= =?UTF-8?q?eet=E5=AF=B9=E5=BA=94=E5=A4=9Amap=E7=9A=84=E6=96=B9=E6=B3=95,?= =?UTF-8?q?=E5=BA=94=E5=AF=B9sheet=E9=87=8D=E5=90=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poi/excel/ExcelExportUtil.java | 14 +++ .../template/ExcelExportOfTemplateUtil.java | 88 ++++++++++++------- 2 files changed, 71 insertions(+), 31 deletions(-) diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java index 170034b..ebfc31f 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java @@ -142,4 +142,18 @@ public final class ExcelExportUtil { return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, null, null, map); } + /** + * 导出文件通过模板解析只有模板,没有集合 + * 每个sheet对应一个map,导出到处,key是sheet的NUM + * @param params + * 导出参数类 + * @param map + * 模板集合 + * @return + */ + public static Workbook exportExcel(Map> map, + TemplateExportParams params) { + return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, map); + } + } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java index d8360e5..fdcf63e 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java @@ -60,8 +60,7 @@ import org.slf4j.LoggerFactory; */ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { - private static final Logger LOGGER = LoggerFactory - .getLogger(ExcelExportOfTemplateUtil.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExportOfTemplateUtil.class); /** * 缓存TEMP 的for each创建的cell ,跳过这个cell的模板语法查找,提高效率 @@ -102,7 +101,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { // 根据表头进行筛选排序 sortAndFilterExportField(excelParams, titlemap); short rowHeight = getRowHeight(excelParams); - int index = teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), titleHeight = index; + int index = teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), + titleHeight = index; //下移数据,模拟插入 sheet.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum(), getShiftRows(dataSet, excelParams), true, true); @@ -124,8 +124,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { * @param excelParams * @return */ - private int getShiftRows(Collection dataSet, List excelParams) - throws Exception { + private int getShiftRows(Collection dataSet, + List excelParams) throws Exception { int size = 0; Iterator its = dataSet.iterator(); while (its.hasNext()) { @@ -173,8 +173,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { setExcelExportStyler((IExcelExportStyler) teplateParams.getStyle() .getConstructor(Workbook.class).newInstance(wb)); // step 3. 解析模板 - for (int i = 0, le = params.isScanAllsheet() ? wb.getNumberOfSheets() : params - .getSheetNum().length; i < le; i++) { + for (int i = 0, le = params.isScanAllsheet() ? wb.getNumberOfSheets() + : params.getSheetNum().length; i < le; i++) { if (params.getSheetName() != null && params.getSheetName().length > i && StringUtils.isNotEmpty(params.getSheetName()[i])) { wb.setSheetName(i, params.getSheetName()[i]); @@ -249,9 +249,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { continue; } for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) { - if (row.getCell(i) != null - && !tempCreateCellSet.contains(row.getRowNum() + "_" - + row.getCell(i).getColumnIndex())) { + if (row.getCell(i) != null && !tempCreateCellSet + .contains(row.getRowNum() + "_" + row.getCell(i).getColumnIndex())) { setValueForCellByMap(row.getCell(i), map); } } @@ -275,13 +274,13 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { } for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) { cell = row.getCell(i); - if (row.getCell(i) != null - && (cell.getCellType() == Cell.CELL_TYPE_STRING || cell.getCellType() == Cell.CELL_TYPE_NUMERIC)) { + if (row.getCell(i) != null && (cell.getCellType() == Cell.CELL_TYPE_STRING + || cell.getCellType() == Cell.CELL_TYPE_NUMERIC)) { cell.setCellType(Cell.CELL_TYPE_STRING); String text = cell.getStringCellValue(); if (text.contains(IF_DELETE)) { - if (Boolean.valueOf(eval( - text.substring(text.indexOf(START_STR) + 2, text.indexOf(END_STR)) + if (Boolean.valueOf( + eval(text.substring(text.indexOf(START_STR) + 2, text.indexOf(END_STR)) .trim(), map).toString())) { PoiSheetUtility.deleteColumn(sheet, i); } @@ -306,7 +305,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { String oldString; cell.setCellType(Cell.CELL_TYPE_STRING); oldString = cell.getStringCellValue(); - if (oldString != null && oldString.indexOf(START_STR) != -1 && !oldString.contains(FOREACH)) { + if (oldString != null && oldString.indexOf(START_STR) != -1 + && !oldString.contains(FOREACH)) { // step 2. 判断是否含有解析函数 String params = null; boolean isNumber = false; @@ -318,8 +318,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { params = oldString.substring(oldString.indexOf(START_STR) + 2, oldString.indexOf(END_STR)); - oldString = oldString.replace(START_STR + params + END_STR, eval(params, map) - .toString()); + oldString = oldString.replace(START_STR + params + END_STR, + eval(params, map).toString()); } //如何是数值 类型,就按照数值类型进行设置 if (isNumber && StringUtils.isNotBlank(oldString)) { @@ -348,8 +348,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { * @param oldString * @throws Exception */ - private void addListDataToExcel(Cell cell, Map map, String name) - throws Exception { + private void addListDataToExcel(Cell cell, Map map, + String name) throws Exception { boolean isCreate = !name.contains(FOREACH_NOT_CREATE); boolean isShift = name.contains(FOREACH_AND_SHIFT); name = name.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY) @@ -370,10 +370,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { setForEeachCellValue(isCreate, cell.getRow(), cell.getColumnIndex(), t, columns, map); } if (isShift) { - cell.getRow() - .getSheet() - .shiftRows(cell.getRowIndex() + 1, cell.getRow().getSheet().getLastRowNum(), - datas.size() - 1, true, true); + cell.getRow().getSheet().shiftRows(cell.getRowIndex() + 1, + cell.getRow().getSheet().getLastRowNum(), datas.size() - 1, true, true); } while (its.hasNext()) { Object t = its.next(); @@ -391,8 +389,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { } private void setForEeachCellValue(boolean isCreate, Row row, int columnIndex, Object t, - List columns, Map map) - throws Exception { + List columns, + Map map) throws Exception { for (int i = 0, max = columnIndex + columns.size(); i < max; i++) { if (row.getCell(i) == null) row.createCell(i); @@ -428,12 +426,12 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { List columns = new ArrayList(); cell.setCellValue(""); if (name.contains(END_STR)) { - columns.add(new ExcelTemplateParams(name.replace(END_STR, EMPTY).trim(), cell - .getCellStyle(), cell.getRow().getHeight())); + columns.add(new ExcelTemplateParams(name.replace(END_STR, EMPTY).trim(), + cell.getCellStyle(), cell.getRow().getHeight())); return columns; } - columns.add(new ExcelTemplateParams(name.trim(), cell.getCellStyle(), cell.getRow() - .getHeight())); + columns.add( + new ExcelTemplateParams(name.trim(), cell.getCellStyle(), cell.getRow().getHeight())); int index = cell.getColumnIndex(); Cell tempCell; while (true) { @@ -458,8 +456,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { break; } else { if (cellStringString.trim().contains(teplateParams.getTempParams())) { - columns.add(new ExcelTemplateParams(cellStringString.trim(), tempCell - .getCellStyle(), tempCell.getRow().getHeight())); + columns.add(new ExcelTemplateParams(cellStringString.trim(), + tempCell.getCellStyle(), tempCell.getRow().getHeight())); } else { //最后一行被删除了 break; @@ -498,4 +496,32 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { sortAllParams(excelParams); } + public Workbook createExcleByTemplate(TemplateExportParams params, + Map> map) { + // step 1. 判断模板的地址 + if (params == null || map == null || StringUtils.isEmpty(params.getTemplateUrl())) { + throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); + } + Workbook wb = null; + // step 2. 判断模板的Excel类型,解析模板 + try { + this.teplateParams = params; + wb = getCloneWorkBook(); + // step 3. 解析模板 + for (int i = 0, le = params.isScanAllsheet() ? wb.getNumberOfSheets() + : params.getSheetNum().length; i < le; i++) { + if (params.getSheetName() != null && params.getSheetName().length > i + && StringUtils.isNotEmpty(params.getSheetName()[i])) { + wb.setSheetName(i, params.getSheetName()[i]); + } + tempCreateCellSet.clear(); + parseTemplate(wb.getSheetAt(i), map.get(i)); + } + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + return null; + } + return wb; + } + }