From fac588015ada0ae16b44a94dcf2f658da0bceb30 Mon Sep 17 00:00:00 2001 From: jueyue Date: Sat, 25 Apr 2015 15:18:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9E=E5=AE=9A=E4=BA=86=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E7=9A=84=E5=9F=BA=E7=A1=80=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poi/cache/manager/FileLoade.java | 17 +- .../poi/excel/ExcelExportUtil.java | 3 + .../poi/excel/ExcelImportUtil.java | 5 +- .../poi/excel/export/ExcelExportServer.java | 4 +- .../excel/export/base/ExcelExportBase.java | 6 +- .../poi/excel/export/base/ExportBase.java | 16 +- .../template/ExcelExportOfTemplateUtil.java | 10 +- .../poi/excel/imports/CellValueServer.java | 3 + .../poi/excel/imports/ExcelImportServer.java | 18 +- .../excel/imports/base/ImportBaseService.java | 26 +-- .../excel/imports/sax/parse/SaxRowRead.java | 10 +- .../jeecgframework/poi/util/PoiElUtil.java | 218 ++++++++++++++++++ .../poi/util/PoiFunctionUtil.java | 147 ++++++++++++ ...{POIPublicUtil.java => PoiPublicUtil.java} | 10 +- .../poi/word/WordExportUtil.java | 8 +- .../poi/word/parse/ParseWord07.java | 8 +- .../word/parse/excel/ExcelEntityParse.java | 4 +- .../poi/word/parse/excel/ExcelMapParse.java | 6 +- .../org/jeecgframework/poi/test/UtilTest.java | 3 + .../poi/util/PoiElUtilTest.java | 103 +++++++++ 20 files changed, 555 insertions(+), 70 deletions(-) create mode 100644 easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java create mode 100644 easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiFunctionUtil.java rename easypoi-base/src/main/java/org/jeecgframework/poi/util/{POIPublicUtil.java => PoiPublicUtil.java} (95%) create mode 100644 easypoi-test/src/main/java/org/jeecgframework/poi/util/PoiElUtilTest.java diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java b/easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java index 93b81ee..af9881e 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java @@ -5,7 +5,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,8 +23,13 @@ class FileLoade { FileInputStream fileis = null; ByteArrayOutputStream baos = null; try { - String path = POIPublicUtil.getWebRootPath(url); - fileis = new FileInputStream(path); + //先用绝对路径查询,再查询相对路径 + try { + fileis = new FileInputStream(url); + } catch (FileNotFoundException e) { + String path = PoiPublicUtil.getWebRootPath(url); + fileis = new FileInputStream(path); + } baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; @@ -34,9 +39,9 @@ class FileLoade { baos.flush(); return baos.toByteArray(); } catch (FileNotFoundException e) { - LOGGER.error(e.getMessage(),e); + LOGGER.error(e.getMessage(), e); } catch (IOException e) { - LOGGER.error(e.getMessage(),e); + LOGGER.error(e.getMessage(), e); } finally { try { if (fileis != null) @@ -44,7 +49,7 @@ class FileLoade { if (fileis != null) baos.close(); } catch (IOException e) { - LOGGER.error(e.getMessage(),e); + LOGGER.error(e.getMessage(), e); } } LOGGER.error(fileis + "这个路径文件没有找到,请查询"); 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 b330e03..57bbacd 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 @@ -24,6 +24,9 @@ import org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil; */ public final class ExcelExportUtil { + private ExcelExportUtil() { + } + /** * @param entity * 表格标题属性 diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java index 8c9a965..5b183b8 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java @@ -23,7 +23,10 @@ import org.slf4j.LoggerFactory; * @version 1.0 */ @SuppressWarnings({ "unchecked" }) -public class ExcelImportUtil { +public final class ExcelImportUtil { + + private ExcelImportUtil() { + } private static final Logger LOGGER = LoggerFactory.getLogger(ExcelImportUtil.class); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java index 7531394..3ffab9e 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java @@ -23,7 +23,7 @@ import org.jeecgframework.poi.excel.export.base.ExcelExportBase; import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler; import org.jeecgframework.poi.exception.excel.ExcelExportException; import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -120,7 +120,7 @@ public class ExcelExportServer extends ExcelExportBase { excelParams.add(indexExcelEntity(entity)); } // 得到所有字段 - Field fileds[] = POIPublicUtil.getClassFields(pojoClass); + Field fileds[] = PoiPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); String targetId = etarget == null ? null : etarget.value(); getAllExcelField(entity.getExclusions(), targetId, fileds, excelParams, pojoClass, null); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java index cdf6420..a4cc1d6 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java @@ -33,7 +33,7 @@ import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; import org.jeecgframework.poi.excel.entity.params.MergeEntity; import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; /** * 提供POI基础操作服务 @@ -164,7 +164,7 @@ public abstract class ExcelExportBase extends ExportBase { ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); BufferedImage bufferImg; try { - String path = POIPublicUtil.getWebRootPath(imagePath); + String path = PoiPublicUtil.getWebRootPath(imagePath); path = path.replace("WEB-INF/classes/", ""); path = path.replace("file:/", ""); bufferImg = ImageIO.read(new File(path)); @@ -346,7 +346,7 @@ public abstract class ExcelExportBase extends ExportBase { * @date 2013年11月25日 */ public int getImageType(byte[] value) { - String type = POIPublicUtil.getFileExtendName(value); + String type = PoiPublicUtil.getFileExtendName(value); if (type.equalsIgnoreCase("JPG")) { return Workbook.PICTURE_TYPE_JPEG; } else if (type.equalsIgnoreCase("PNG")) { diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java index 07b2808..fd99326 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java @@ -18,7 +18,7 @@ import org.jeecgframework.poi.excel.annotation.ExcelCollection; import org.jeecgframework.poi.excel.annotation.ExcelEntity; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; import org.jeecgframework.poi.handler.inter.IExcelDataHandler; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; /** * 导出基础处理,不设计POI,只设计对象,保证复用性 @@ -91,23 +91,23 @@ public class ExportBase { for (int i = 0; i < fields.length; i++) { Field field = fields[i]; // 先判断是不是collection,在判断是不是java自带对象,之后就是我们自己的对象了 - if (POIPublicUtil.isNotUserExcelUserThis(exclusionsList, field, targetId)) { + if (PoiPublicUtil.isNotUserExcelUserThis(exclusionsList, field, targetId)) { continue; } // 首先判断Excel 可能一下特殊数据用户回自定义处理 if (field.getAnnotation(Excel.class) != null) { excelParams.add(createExcelExportEntity(field, targetId, pojoClass, getMethods)); - } else if (POIPublicUtil.isCollection(field.getType())) { + } else if (PoiPublicUtil.isCollection(field.getType())) { ExcelCollection excel = field.getAnnotation(ExcelCollection.class); ParameterizedType pt = (ParameterizedType) field.getGenericType(); Class clz = (Class) pt.getActualTypeArguments()[0]; List list = new ArrayList(); getAllExcelField(exclusions, StringUtils.isNotEmpty(excel.id()) ? excel.id() - : targetId, POIPublicUtil.getClassFields(clz), list, clz, null); + : targetId, PoiPublicUtil.getClassFields(clz), list, clz, null); excelEntity = new ExcelExportEntity(); excelEntity.setName(getExcelName(excel.name(), targetId)); excelEntity.setOrderNum(getCellOrder(excel.orderNum(), targetId)); - excelEntity.setMethod(POIPublicUtil.getMethod(field.getName(), pojoClass)); + excelEntity.setMethod(PoiPublicUtil.getMethod(field.getName(), pojoClass)); excelEntity.setList(list); excelParams.add(excelEntity); } else { @@ -115,10 +115,10 @@ public class ExportBase { if (getMethods != null) { newMethods.addAll(getMethods); } - newMethods.add(POIPublicUtil.getMethod(field.getName(), pojoClass)); + newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass)); ExcelEntity excel = field.getAnnotation(ExcelEntity.class); getAllExcelField(exclusions, StringUtils.isNotEmpty(excel.id()) ? excel.id() - : targetId, POIPublicUtil.getClassFields(field.getType()), excelParams, + : targetId, PoiPublicUtil.getClassFields(field.getType()), excelParams, field.getType(), newMethods); } } @@ -222,7 +222,7 @@ public class ExportBase { : excel.format()); excelEntity.setStatistics(excel.isStatistics()); String fieldname = field.getName(); - excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass)); + excelEntity.setMethod(PoiPublicUtil.getMethod(fieldname, pojoClass)); } /** 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 e7ec574..3b381d2 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 @@ -27,7 +27,7 @@ import org.jeecgframework.poi.excel.export.base.ExcelExportBase; import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler; import org.jeecgframework.poi.exception.excel.ExcelExportException; import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,7 +70,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { Map titlemap = getTitleMap(params, sheet); Drawing patriarch = sheet.createDrawingPatriarch(); // 得到所有字段 - Field[] fileds = POIPublicUtil.getClassFields(pojoClass); + Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); String targetId = null; if (etarget != null) { @@ -201,7 +201,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { if (params.indexOf(".") != -1) { String[] paramsArr = params.split("\\."); return String - .valueOf(POIPublicUtil.getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1)); + .valueOf(PoiPublicUtil.getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1)); } return map.containsKey(params) ? map.get(params).toString() : ""; } @@ -257,7 +257,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { */ private void setValueForCellByMap(Cell cell, Map map) throws Exception { int cellType = cell.getCellType(); - if (cellType != Cell.CELL_TYPE_STRING && cellType == Cell.CELL_TYPE_NUMERIC) { + if (cellType != Cell.CELL_TYPE_STRING && cellType != Cell.CELL_TYPE_NUMERIC) { return; } String oldString; @@ -340,7 +340,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { row.createCell(i); } for (int i = 0, max = columns.size(); i < max; i++) { - String val = String.valueOf(POIPublicUtil.getValueDoWhile(t, columns.get(i) + String val = String.valueOf(PoiPublicUtil.getValueDoWhile(t, columns.get(i) .split("\\."), 0)); row.getCell(i + columnIndex).setCellValue(val); tempCreateCellSet.add(row.getRowNum() + "_" + (i + columnIndex)); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java index acd4009..eb62eae 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java @@ -153,6 +153,9 @@ public class CellValueServer { if (xclass.equals("class java.lang.Long") || xclass.equals("long")) { return Long.valueOf(String.valueOf(result)); } + if (xclass.equals("class java.lang.Float") || xclass.equals("float")) { + return Float.valueOf(String.valueOf(result)); + } if (xclass.equals("class java.lang.Integer") || xclass.equals("int")) { return Integer.valueOf(String.valueOf(result)); } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java index aecc264..d774b48 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java @@ -39,7 +39,7 @@ import org.jeecgframework.poi.excel.imports.base.ImportBaseService; import org.jeecgframework.poi.excel.imports.verifys.VerifyHandlerServer; import org.jeecgframework.poi.exception.excel.ExcelImportException; import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,9 +85,9 @@ public class ExcelImportServer extends ImportBaseService { Map titlemap, String targetId, Map pictures, ImportParams params) throws Exception { - Collection collection = (Collection) POIPublicUtil.getMethod(param.getName(), + Collection collection = (Collection) PoiPublicUtil.getMethod(param.getName(), object.getClass()).invoke(object, new Object[] {}); - Object entity = POIPublicUtil.createObject(param.getType(), targetId); + Object entity = PoiPublicUtil.createObject(param.getType(), targetId); String picId; boolean isUsed = false;// 是否需要加上这个对象 for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) { @@ -159,7 +159,7 @@ public class ExcelImportServer extends ImportBaseService { List collection = new ArrayList(); Map excelParams = new HashMap(); List excelCollection = new ArrayList(); - Field fileds[] = POIPublicUtil.getClassFields(pojoClass); + Field fileds[] = PoiPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); String targetId = null; if (etarget != null) { @@ -197,7 +197,7 @@ public class ExcelImportServer extends ImportBaseService { addListContinue(object, param, row, titlemap, targetId, pictures, params); } } else { - object = POIPublicUtil.createObject(pojoClass, targetId); + object = PoiPublicUtil.createObject(pojoClass, targetId); try { for (int i = row.getFirstCellNum(), le = row.getLastCellNum(); i < le; i++) { Cell cell = row.getCell(i); @@ -259,10 +259,10 @@ public class ExcelImportServer extends ImportBaseService { LOGGER.debug(" start to read excel by is ,startTime is {}", new Date().getTime()); } if (isXSSFWorkbook) { - pictures = POIPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i), + pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i), (XSSFWorkbook) book); } else { - pictures = POIPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i), + pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i), (HSSFWorkbook) book); } if (LOGGER.isDebugEnabled()) { @@ -328,9 +328,9 @@ public class ExcelImportServer extends ImportBaseService { PictureData image = pictures.get(picId); byte[] data = image.getData(); String fileName = "pic" + Math.round(Math.random() * 100000000000L); - fileName += "." + POIPublicUtil.getFileExtendName(data); + fileName += "." + PoiPublicUtil.getFileExtendName(data); if (excelParams.get(titleString).getSaveType() == 1) { - String path = POIPublicUtil.getWebRootPath(getSaveUrl(excelParams.get(titleString), + String path = PoiPublicUtil.getWebRootPath(getSaveUrl(excelParams.get(titleString), object)); File savefile = new File(path); if (!savefile.exists()) { diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java index 7187a4c..e6def94 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java @@ -20,7 +20,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams; import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; /** * 导入基础和,普通方法和Sax共用 @@ -104,10 +104,10 @@ public class ImportBaseService { ExcelImportEntity excelEntity = null; for (int i = 0; i < fields.length; i++) { Field field = fields[i]; - if (POIPublicUtil.isNotUserExcelUserThis(null, field, targetId)) { + if (PoiPublicUtil.isNotUserExcelUserThis(null, field, targetId)) { continue; } - if (POIPublicUtil.isCollection(field.getType())) { + if (PoiPublicUtil.isCollection(field.getType())) { // 集合对象设置属性 ExcelCollectionParams collection = new ExcelCollectionParams(); collection.setName(field.getName()); @@ -115,18 +115,18 @@ public class ImportBaseService { ParameterizedType pt = (ParameterizedType) field.getGenericType(); Class clz = (Class) pt.getActualTypeArguments()[0]; collection.setType(clz); - getExcelFieldList(targetId, POIPublicUtil.getClassFields(clz), clz, temp, null); + getExcelFieldList(targetId, PoiPublicUtil.getClassFields(clz), clz, temp, null); collection.setExcelParams(temp); excelCollection.add(collection); - } else if (POIPublicUtil.isJavaClass(field)) { + } else if (PoiPublicUtil.isJavaClass(field)) { addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, excelParams); } else { List newMethods = new ArrayList(); if (getMethods != null) { newMethods.addAll(getMethods); } - newMethods.add(POIPublicUtil.getMethod(field.getName(), pojoClass)); - getAllExcelField(targetId, POIPublicUtil.getClassFields(field.getType()), + newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass)); + getAllExcelField(targetId, PoiPublicUtil.getClassFields(field.getType()), excelParams, excelCollection, field.getType(), newMethods); } } @@ -136,7 +136,7 @@ public class ImportBaseService { Excel excel, Class pojoClass) throws Exception { excelEntity.setName(getExcelName(excel.name(), targetId)); String fieldname = field.getName(); - excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass, field.getType())); + excelEntity.setMethod(PoiPublicUtil.getMethod(fieldname, pojoClass, field.getType())); if (StringUtils.isEmpty(excel.importFormat())) { excelEntity.setFormat(excel.format()); } else { @@ -150,10 +150,10 @@ public class ImportBaseService { ExcelImportEntity excelEntity = null; for (int i = 0; i < fields.length; i++) { Field field = fields[i]; - if (POIPublicUtil.isNotUserExcelUserThis(null, field, targetId)) { + if (PoiPublicUtil.isNotUserExcelUserThis(null, field, targetId)) { continue; } - if (POIPublicUtil.isJavaClass(field)) { + if (PoiPublicUtil.isJavaClass(field)) { addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, temp); } else { List newMethods = new ArrayList(); @@ -161,8 +161,8 @@ public class ImportBaseService { newMethods.addAll(getMethods); } newMethods - .add(POIPublicUtil.getMethod(field.getName(), pojoClass, field.getType())); - getExcelFieldList(targetId, POIPublicUtil.getClassFields(field.getType()), + .add(PoiPublicUtil.getMethod(field.getName(), pojoClass, field.getType())); + getExcelFieldList(targetId, PoiPublicUtil.getClassFields(field.getType()), field.getType(), temp, newMethods); } } @@ -199,7 +199,7 @@ public class ImportBaseService { public void saveThisExcel(ImportParams params, Class pojoClass, boolean isXSSFWorkbook, Workbook book) throws Exception { - String path = POIPublicUtil.getWebRootPath(getSaveExcelUrl(params, pojoClass)); + String path = PoiPublicUtil.getWebRootPath(getSaveExcelUrl(params, pojoClass)); File savefile = new File(path); if (!savefile.exists()) { savefile.mkdirs(); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java index 337432f..a5be436 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java @@ -17,7 +17,7 @@ import org.jeecgframework.poi.excel.imports.CellValueServer; import org.jeecgframework.poi.excel.imports.base.ImportBaseService; import org.jeecgframework.poi.exception.excel.ExcelImportException; import org.jeecgframework.poi.handler.inter.IExcelReadRowHanlder; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,7 +67,7 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { private void initParams(Class pojoClass, ImportParams params) { try { - Field fileds[] = POIPublicUtil.getClassFields(pojoClass); + Field fileds[] = PoiPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); if (etarget != null) { targetId = etarget.value(); @@ -122,7 +122,7 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { if (object != null && hanlder != null) { hanlder.hanlder(object); } - object = POIPublicUtil.createObject(pojoClass, targetId); + object = PoiPublicUtil.createObject(pojoClass, targetId); SaxReadCellEntity entity; for (int i = 0, le = datas.size(); i < le; i++) { entity = datas.get(i); @@ -155,9 +155,9 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { private void addListContinue(Object object, ExcelCollectionParams param, List datas, Map titlemap, String targetId, ImportParams params) throws Exception { - Collection collection = (Collection) POIPublicUtil.getMethod(param.getName(), + Collection collection = (Collection) PoiPublicUtil.getMethod(param.getName(), object.getClass()).invoke(object, new Object[] {}); - Object entity = POIPublicUtil.createObject(param.getType(), targetId); + Object entity = PoiPublicUtil.createObject(param.getType(), targetId); boolean isUsed = false;// 是否需要加上这个对象 for (int i = 0; i < datas.size(); i++) { String titleString = (String) titlemap.get(i); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java new file mode 100644 index 0000000..90543d9 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java @@ -0,0 +1,218 @@ +package org.jeecgframework.poi.util; + +import java.util.Map; + +import org.jeecgframework.poi.exception.excel.ExcelExportException; + +/** + * EasyPoi的el 表达式支持工具类 + * @author JueYue + * @date 2015年4月25日 下午12:13:21 + */ +public final class PoiElUtil { + + private static final String LENGTH = "le:"; + private static final String FORMAT_DATE = "fd:"; + private static final String FORMAT_NUMBER = "fn:"; + private static final String IF_DELETE = "!if:"; + private static final String EMPTY = ""; + private static final String LEFT_BRACKET = "("; + private static final String RIGHT_BRACKET = ")"; + + private PoiElUtil() { + } + + /** + * 解析字符串,支持 le,fd,fn,!if,三目 + * @param obj + * @param map + * @return + * @throws Exception + */ + public static Object eval(String text, Map map) throws Exception { + String tempText = new String(text); + Object obj = innerEval(text, map); + //如果没有被处理而且这个值找map中存在就处理这个值 + if (tempText.equals(obj.toString()) && map.containsKey(tempText.split("\\.")[0])) { + return PoiPublicUtil.getParamsValue(tempText, map); + } + return obj; + } + + /** + * 解析字符串,支持 le,fd,fn,!if,三目 + * @param obj + * @param map + * @return + * @throws Exception + */ + public static Object innerEval(String text, Map map) throws Exception { + if (text.indexOf("?") != -1 && text.indexOf(":") != -1) { + return trinocular(text, map); + } + if (text.indexOf(LENGTH) != -1) { + return length(text, map); + } + if (text.indexOf(FORMAT_DATE) != -1) { + return formatDate(text, map); + } + if (text.indexOf(FORMAT_NUMBER) != -1) { + return formatNumber(text, map); + } + if (text.indexOf(IF_DELETE) != -1) { + return ifDelete(text, map); + } + if (text.startsWith("'")) { + return text.replace("'", ""); + } + return text; + } + + /** + * 是不是删除列 + * @param text + * @param map + * @return + * @throws Exception + */ + private static Object ifDelete(String text, Map map) throws Exception { + //把多个空格变成一个空格 + text = text.replaceAll("\\s{1,}", " ").trim(); + String[] keys = getKey(IF_DELETE, text).split(" "); + text = text.replace(IF_DELETE, EMPTY); + return isTrue(keys, map); + } + + /** + * 是不是真 + * @param keys + * @param map + * @return + * @throws Exception + */ + private static Boolean isTrue(String[] keys, Map map) throws Exception { + if (keys.length == 0) { + String constant = null; + if ((constant = isConstant(keys[0])) != null) { + return Boolean.valueOf(constant); + } + return Boolean.valueOf(PoiPublicUtil.getParamsValue(keys[0], map).toString()); + } + if (keys.length == 3) { + Object first = eval(keys[0], map); + Object second = eval(keys[2], map); + return PoiFunctionUtil.isTrue(first, keys[1], second); + } + throw new ExcelExportException("判断参数不对"); + } + + /** + * 判断是不是常量 + * @param string + * @return + */ + private static String isConstant(String param) { + if (param.indexOf("'") != -1) { + return param.replace("'", ""); + } + return null; + } + + /** + * 格式化数字 + * @param text + * @param map + * @return + * @throws Exception + */ + private static Object formatNumber(String text, Map map) throws Exception { + String[] key = getKey(FORMAT_NUMBER, text).split(";"); + text = text.replace(FORMAT_NUMBER, EMPTY); + return innerEval( + replacinnerEvalue(text, + PoiFunctionUtil.formatNumber(PoiPublicUtil.getParamsValue(key[0], map), key[1])), + map); + } + + /** + * 格式化时间 + * @param text + * @param map + * @return + * @throws Exception + */ + private static Object formatDate(String text, Map map) throws Exception { + String[] key = getKey(FORMAT_DATE, text).split(";"); + text = text.replace(FORMAT_DATE, EMPTY); + return innerEval( + replacinnerEvalue(text, + PoiFunctionUtil.formatDate(PoiPublicUtil.getParamsValue(key[0], map), key[1])), map); + } + + /** + * 计算这个的长度 + * @param text + * @param map + * @throws Exception + */ + private static Object length(String text, Map map) throws Exception { + String key = getKey(LENGTH, text); + text = text.replace(LENGTH, EMPTY); + Object val = PoiPublicUtil.getParamsValue(key, map); + return innerEval(replacinnerEvalue(text, PoiFunctionUtil.length(val)), map); + } + + private static String replacinnerEvalue(String text, Object val) { + StringBuilder sb = new StringBuilder(); + sb.append(text.substring(0, text.indexOf(LEFT_BRACKET))); + sb.append(" "); + sb.append(val); + sb.append(" "); + sb.append(text.substring(text.indexOf(RIGHT_BRACKET) + 1, text.length())); + return sb.toString().trim(); + } + + private static String getKey(String prefix, String text) { + int leftBracket = 1, rigthBracket = 0, position = 0; + int index = text.indexOf(prefix) + prefix.length(); + while (text.charAt(index) == " ".charAt(0)) { + text = text.substring(0, index) + text.substring(index + 1, text.length()); + } + for (int i = text.indexOf(prefix + LEFT_BRACKET) + prefix.length() + 1; i < text.length(); i++) { + if (text.charAt(i) == LEFT_BRACKET.charAt(0)) { + leftBracket++; + } + if (text.charAt(i) == RIGHT_BRACKET.charAt(0)) { + rigthBracket++; + } + if (leftBracket == rigthBracket) { + position = i; + break; + } + } + return text.substring(text.indexOf(prefix + LEFT_BRACKET) + 1 + prefix.length(), position) + .trim(); + } + + public static void main(String[] args) { + System.out.println(getKey(IF_DELETE, "测试 " + IF_DELETE + " (小明)")); + } + + /** + * 三目运算 + * @return + * @throws Exception + */ + private static Object trinocular(String text, Map map) throws Exception { + //把多个空格变成一个空格 + text = text.replaceAll("\\s{1,}", " ").trim(); + String testText = text.substring(0, text.indexOf("?")); + text = text.substring(text.indexOf("?") + 1, text.length()).trim(); + text = innerEval(text, map).toString(); + String[] keys = text.split(":"); + Object first = eval(keys[0].trim(), map); + Object second = eval(keys[1].trim(), map); + return isTrue(testText.split(" "), map) ? first : second; + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiFunctionUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiFunctionUtil.java new file mode 100644 index 0000000..1eb47fd --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiFunctionUtil.java @@ -0,0 +1,147 @@ +package org.jeecgframework.poi.util; + +import java.lang.reflect.Array; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Collection; +import java.util.Map; + +import org.jeecgframework.poi.exception.excel.ExcelExportException; + +/** + * if else,length,for each,fromatNumber,formatDate + * 满足模板的 el 表达式支持 + * @author JueYue + * @date 2015年4月24日 下午8:04:02 + */ +public final class PoiFunctionUtil { + + private static final String TWO_DECIMAL_STR = "###.00"; + private static final String THREE_DECIMAL_STR = "###.000"; + + private static final DecimalFormat TWO_DECIMAL = new DecimalFormat(TWO_DECIMAL_STR); + private static final DecimalFormat THREE_DECIMAL = new DecimalFormat(THREE_DECIMAL_STR); + + private static final String DAY_STR = "yyyy-MM-dd"; + private static final String TIME_STR = "yyyy-MM-dd HH:mm:ss"; + private static final String TIME__NO_S_STR = "yyyy-MM-dd HH:mm"; + + private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat(DAY_STR); + private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat(TIME_STR); + private static final SimpleDateFormat TIME__NO_S_FORMAT = new SimpleDateFormat(TIME__NO_S_STR); + + private PoiFunctionUtil() { + } + + /** + * 获取对象的长度 + * @param obj + * @return + */ + @SuppressWarnings("rawtypes") + public static int length(Object obj) { + if (obj == null) { + return 0; + } + if (obj instanceof Map) { + return ((Map) obj).size(); + } + if (obj instanceof Collection) { + return ((Collection) obj).size(); + } + if (obj.getClass().isArray()) { + return Array.getLength(obj); + } + return String.valueOf(obj).length(); + } + + /** + * 格式化数字 + * @param obj + * @throws NumberFormatException + * @return + */ + public static String formatNumber(Object obj, String format) { + if (obj == null) { + return ""; + } + double number = Double.valueOf(obj.toString()); + DecimalFormat decimalFormat = null; + if (TWO_DECIMAL.equals(format)) { + decimalFormat = TWO_DECIMAL; + } else if (THREE_DECIMAL_STR.equals(format)) { + decimalFormat = THREE_DECIMAL; + } else { + decimalFormat = new DecimalFormat(format); + } + return decimalFormat.format(number); + } + + /** + * 格式化时间 + * @param obj + * @return + */ + public static String formatDate(Object obj, String format) { + if (obj == null) { + return ""; + } + SimpleDateFormat dateFormat = null; + if (DAY_STR.equals(format)) { + dateFormat = DAY_FORMAT; + } else if (TIME_STR.equals(format)) { + dateFormat = TIME_FORMAT; + } else if (TIME__NO_S_STR.equals(format)) { + dateFormat = TIME__NO_S_FORMAT; + } else { + dateFormat = new SimpleDateFormat(format); + } + return dateFormat.format(obj); + } + + /** + * 判断是不是成功 + * @param first + * @param operator + * @param second + * @return + */ + public static boolean isTrue(Object first, String operator, Object second) { + if (">".endsWith(operator)) { + return isGt(first, second); + } else if ("<".endsWith(operator)) { + return isGt(second, first); + } else if ("==".endsWith(operator)) { + if (first != null && second != null) { + return first.equals(second); + } + return first == second; + } else if ("!=".endsWith(operator)) { + if (first != null && second != null) { + return !first.equals(second); + } + return first != second; + } else { + throw new ExcelExportException("占不支持改操作符"); + } + } + + /** + * 前者是不是大于后者 + * @param first + * @param second + * @return + */ + private static boolean isGt(Object first, Object second) { + if (first == null) { + return false; + } + if (second == null) { + return false; + } + double one = Double.valueOf(first.toString()); + double two = Double.valueOf(second.toString()); + return one > two; + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiPublicUtil.java similarity index 95% rename from easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java rename to easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiPublicUtil.java index f9db0dc..0a6f632 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiPublicUtil.java @@ -42,9 +42,9 @@ import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; * @author JueYue * @date 2015年4月5日 上午12:59:22 */ -public final class POIPublicUtil { +public final class PoiPublicUtil { - private POIPublicUtil() { + private PoiPublicUtil() { } @@ -219,7 +219,7 @@ public final class POIPublicUtil { public static String getWebRootPath(String filePath) { try { - String path = POIPublicUtil.class.getClassLoader().getResource("").toURI().getPath(); + String path = PoiPublicUtil.class.getClassLoader().getResource("").toURI().getPath(); path = path.replace("WEB-INF/classes/", ""); path = path.replace("file:/", ""); return path + filePath; @@ -349,7 +349,7 @@ public final class POIPublicUtil { type = entity.getUrl().split("/.")[entity.getUrl().split("/.").length - 1]; } else { result[0] = entity.getData(); - type = POIPublicUtil.getFileExtendName(entity.getData()); + type = PoiPublicUtil.getFileExtendName(entity.getData()); } result[1] = getImageType(type); return result; @@ -362,7 +362,7 @@ public final class POIPublicUtil { * @param map * @return */ - private static Object getParamsValue(String params, Map map) throws Exception { + public static Object getParamsValue(String params, Map map) throws Exception { if (params.indexOf(".") != -1) { String[] paramsArr = params.split("\\."); return getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java index e9ee0aa..186f602 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java @@ -12,10 +12,10 @@ import org.jeecgframework.poi.word.parse.ParseWord07; * @date 2013-11-16 * @version 1.0 */ -public class WordExportUtil { - - private WordExportUtil(){ - +public final class WordExportUtil { + + private WordExportUtil() { + } /** diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java b/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java index fe41ac3..12c1b8c 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java @@ -14,7 +14,7 @@ import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.jeecgframework.poi.cache.WordCache; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.jeecgframework.poi.word.entity.MyXWPFDocument; import org.jeecgframework.poi.word.entity.WordImageEntity; import org.jeecgframework.poi.word.entity.params.ExcelListEntity; @@ -45,7 +45,7 @@ public class ParseWord07 { * @throws Exception */ private void addAnImage(WordImageEntity obj, XWPFRun currentRun) throws Exception { - Object[] isAndType = POIPublicUtil.getIsAndType(obj); + Object[] isAndType = PoiPublicUtil.getIsAndType(obj); String picId; try { picId = currentRun.getParagraph().getDocument() @@ -70,7 +70,7 @@ public class ParseWord07 { */ private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, List runIndex, Map map) throws Exception { - Object obj = POIPublicUtil.getRealValue(currentText, map); + Object obj = PoiPublicUtil.getRealValue(currentText, map); if (obj instanceof WordImageEntity) {// 如果是图片就设置为图片 currentRun.setText("", 0); addAnImage((WordImageEntity) obj, currentRun); @@ -97,7 +97,7 @@ public class ParseWord07 { String text = cell.getText().trim(); // 判断是不是迭代输出 if (text.startsWith("{{") && text.endsWith("}}") && text.indexOf("in ") != -1) { - return POIPublicUtil.getRealValue(text.replace("in ", "").trim(), map); + return PoiPublicUtil.getRealValue(text.replace("in ", "").trim(), map); } return null; } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java b/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java index 605ca2a..baebafc 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java @@ -17,7 +17,7 @@ import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; import org.jeecgframework.poi.excel.export.base.ExportBase; import org.jeecgframework.poi.exception.word.WordExportException; import org.jeecgframework.poi.exception.word.enmus.WordExportEnum; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.jeecgframework.poi.word.entity.params.ExcelListEntity; /** @@ -139,7 +139,7 @@ public class ExcelEntityParse extends ExportBase { Map titlemap = getTitleMap(table, index, entity.getHeadRows()); try { // 得到所有字段 - Field fileds[] = POIPublicUtil.getClassFields(entity.getClazz()); + Field fileds[] = PoiPublicUtil.getClassFields(entity.getClazz()); ExcelTarget etarget = entity.getClazz().getAnnotation(ExcelTarget.class); String targetId = null; if (etarget != null) { diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java b/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java index 34347db..86fe586 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java @@ -5,7 +5,7 @@ import java.util.List; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; -import org.jeecgframework.poi.util.POIPublicUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; /** * 处理和生成Map 类型的数据变成表格 @@ -54,12 +54,12 @@ public final class ExcelMapParse { .getTableCells() .get(cellIndex) .setText( - POIPublicUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0) + PoiPublicUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0) .toString()); } for (; cellIndex < params.length; cellIndex++) { currentRow.createCell().setText( - POIPublicUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0) + PoiPublicUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0) .toString()); } } diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/test/UtilTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/test/UtilTest.java index f1fe366..accd039 100644 --- a/easypoi-test/src/main/java/org/jeecgframework/poi/test/UtilTest.java +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/test/UtilTest.java @@ -7,6 +7,9 @@ public class UtilTest { text = text.replace("{{", "").replace("}}", "").replaceAll("\\s{1,}", " ").trim(); System.out.println(text); System.out.println(text.length()); + + + } } diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/util/PoiElUtilTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/util/PoiElUtilTest.java new file mode 100644 index 0000000..81ac316 --- /dev/null +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/util/PoiElUtilTest.java @@ -0,0 +1,103 @@ +package org.jeecgframework.poi.util; + +import static org.junit.Assert.*; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import junit.framework.Assert; + +import org.junit.Test; + +public class PoiElUtilTest { + + @Test + public void testEval() throws Exception { + + Map map = new HashMap(); + map.put("jueyue", "jueyue"); + + //length 测试 + Object obj = PoiElUtil.eval("le:(jueyue)", map); + Assert.assertEquals("6", obj); + + //format date 测试 + map.put("date", new Date()); + obj = PoiElUtil.eval("fd:(date;yyyy-MM-dd)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fd:(date;yyyy-MM-dd HH:mm:ss)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fd:(date;yyyy-MM-dd HH:mm)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fd:(date;yyyy/MM/dd HH:mm:ss)", map); + System.out.println(obj); + + map.put("date2", new Date().getTime()); + obj = PoiElUtil.eval("fd:(date2;yyyy-MM-dd)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fd:(date2;yyyy-MM-dd HH:mm:ss)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fd:(date2;yyyy-MM-dd HH:mm)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fd:(date2;yyyy/MM/dd HH:mm:ss)", map); + System.out.println(obj); + + //format number 测试 + map.put("number", 213123123123.34234234); + obj = PoiElUtil.eval("fn:(number;###.00)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fn:(number;###.0)", map); + System.out.println(obj); + obj = PoiElUtil.eval("fn:(number;#,###.0)", map); + System.out.println(obj); + + // !if 测试 + obj = PoiElUtil.eval("!if:(le:(jueyue) == '6')", map); + Assert.assertEquals(obj, true); + + obj = PoiElUtil.eval("!if:(fd:(date2;yyyy-MM-dd) == '2015-04-25')", map); + Assert.assertEquals(obj, true); + + obj = PoiElUtil.eval("!if:(fn:(number;###.0) > '3')", map); + Assert.assertEquals(obj, true); + + map.put("key1", "测试1"); + + //三目运算 + obj = PoiElUtil.eval("'6' == '6' ? 'jueyue' : '小明'", map); + Assert.assertEquals(obj, "jueyue"); + + obj = PoiElUtil.eval("le:(jueyue) == '6' ? 'jueyue' : '小明'", map); + Assert.assertEquals(obj, "jueyue"); + + obj = PoiElUtil.eval("'6' == le:(jueyue) ? 'jueyue' : '小明'", map); + Assert.assertEquals(obj, "jueyue"); + + obj = PoiElUtil.eval("'6' == le:(jueyue) ? fd:(date;yyyy-MM-dd) : '小明'", map); + Assert.assertEquals(obj, "2015-04-25"); + obj = PoiElUtil.eval("'6' != le:(jueyue) ? '小明' : fd:(date;yyyy-MM-dd)", map); + Assert.assertEquals(obj, "2015-04-25"); + + obj = PoiElUtil.eval("jueyue == 'jueyue' ? key1 : '小明'", map); + Assert.assertEquals(obj, "测试1"); + + map.put("key1", "100"); + map.put("key2", "200"); + + obj = PoiElUtil.eval("key1 == key2 ? key1 : '小明'", map); + Assert.assertEquals(obj, "小明"); + + obj = PoiElUtil.eval("key1 < key2 ? key1 : '小明'", map); + Assert.assertEquals(obj, "100"); + + obj = PoiElUtil.eval("key2 > key1 ? key1 : '小明'", map); + Assert.assertEquals(obj, "100"); + + map.put("key1", "你好"); + + obj = PoiElUtil.eval("key1 == '你好' ? '不好' : '小明'", map); + Assert.assertEquals(obj, "不好"); + + } +}