From 97d33394cc521e5941933e8a2f9957dba1ea9f77 Mon Sep 17 00:00:00 2001 From: jueyue Date: Sun, 30 Nov 2014 19:08:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=88=B0=E4=BA=862.0.6-SNAPS?= =?UTF-8?q?HOT,=E5=A2=9E=E5=8A=A0=E4=BA=86=E7=B4=A2=E5=BC=95=E9=A1=B9,?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E4=BA=86map=E5=AF=BC=E5=87=BA=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy.bat | 2 +- easypoi-base/.classpath | 6 +- easypoi-base/pom.xml | 2 +- .../poi/excel/ExcelExportUtil.java | 15 ++ .../poi/excel/entity/ExportParams.java | 12 ++ .../excel/entity/params/ExcelBaseEntity.java | 4 +- .../entity/params/ExcelExportEntity.java | 41 ++++- .../poi/excel/entity/vo/PoiBaseConstants.java | 2 + .../poi/excel/export/ExcelExportServer.java | 91 ++++++++++- .../excel/export/base/ExcelExportBase.java | 27 +++- .../poi/excel/export/base/ExportBase.java | 37 +++-- .../template/ExcelExportOfTemplateUtil.java | 11 +- .../poi/excel/imports/CellValueServer.java | 3 + .../poi/excel/imports/ExcelImportServer.java | 12 +- easypoi-test/.classpath | 8 +- easypoi-test/pom.xml | 2 +- .../jeecgframework/poi/entity/MsgClient.java | 146 ++++++++++++++++++ .../poi/entity/MsgClientGroup.java | 57 +++++++ .../poi/excel/ExcelImportUtilTest.java | 10 +- .../poi/excel/doc/exportTemp.xls | Bin 0 -> 23552 bytes .../poi/excel/test/ExcelExportForMap.java | 51 ++++++ .../excel/test/ExcelExportTemplateTest.java | 108 +++++++++++++ .../poi/excel/test/ExcelExportUtilIdTest.java | 7 +- .../poi/excel/test/ExcelExportUtilTest.java | 15 +- .../src/main/resources/log4j.properties | 11 ++ easypoi-web/.classpath | 8 +- easypoi-web/.project | 6 + easypoi-web/pom.xml | 3 +- .../excel/entity/vo/MapExcelConstants.java | 22 +++ .../poi/excel/view/JeecgMapExcelView.java | 56 +++++++ .../poi/excel/view/JeecgSingleExcelView.java | 25 ++- .../excel/view/JeecgTemplateExcelView.java | 16 +- .../poi/excel/view/JeecgTemplateWordView.java | 20 ++- package.bat | 2 +- pom.xml | 23 ++- 35 files changed, 780 insertions(+), 81 deletions(-) create mode 100644 easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClient.java create mode 100644 easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClientGroup.java create mode 100644 easypoi-test/src/main/java/org/jeecgframework/poi/excel/doc/exportTemp.xls create mode 100644 easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportForMap.java create mode 100644 easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportTemplateTest.java create mode 100644 easypoi-test/src/main/resources/log4j.properties create mode 100644 easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/MapExcelConstants.java create mode 100644 easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java diff --git a/deploy.bat b/deploy.bat index 92a7c3f..35b4a09 100644 --- a/deploy.bat +++ b/deploy.bat @@ -1 +1 @@ -cmd /k mvn clean deploy -DskipTest \ No newline at end of file +cmd /k mvn clean deploy -D skipTest \ No newline at end of file diff --git a/easypoi-base/.classpath b/easypoi-base/.classpath index 2aabaef..c9464c0 100644 --- a/easypoi-base/.classpath +++ b/easypoi-base/.classpath @@ -6,8 +6,9 @@ - + + @@ -16,9 +17,8 @@ - + - diff --git a/easypoi-base/pom.xml b/easypoi-base/pom.xml index bf8bb20..3ecfdbf 100644 --- a/easypoi-base/pom.xml +++ b/easypoi-base/pom.xml @@ -4,7 +4,7 @@ org.jeecgframework easypoi - 2.0.2 + 2.0.6-SNAPSHOT easypoi-base 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 aadd3ea..24e3203 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 @@ -8,6 +8,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.TemplateExportParams; +import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; import org.jeecgframework.poi.excel.export.ExcelExportServer; import org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil; @@ -54,6 +55,20 @@ public final class ExcelExportUtil { new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet); return workbook; } + /** + * @param entity + * 表格标题属性 + * @param pojoClass + * Excel对象Class + * @param dataSet + * Excel对象数据List + */ + public static HSSFWorkbook exportExcel(ExportParams entity, + List entityList, Collection> dataSet) { + HSSFWorkbook workbook = new HSSFWorkbook(); + new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet); + return workbook; + } /** * 导出文件通过模板解析 diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java index dbd9132..90aee6b 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java @@ -49,6 +49,10 @@ public class ExportParams extends ExcelBaseParams { * 过滤的属性 */ private String[] exclusions; + /** + * 是否添加需要需要 + */ + private boolean addIndex; /** * 表头颜色 */ @@ -122,4 +126,12 @@ public class ExportParams extends ExcelBaseParams { public void setSecondTitleHeight(short secondTitleHeight) { this.secondTitleHeight = secondTitleHeight; } + + public boolean isAddIndex() { + return addIndex; + } + + public void setAddIndex(boolean addIndex) { + this.addIndex = addIndex; + } } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java index a998936..548de80 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java @@ -11,11 +11,11 @@ public class ExcelBaseEntity { /** * 对应name */ - private String name; + protected String name; /** * 对应type */ - private int type; + private int type = 1; /** * 数据库格式 */ diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java index fec230c..09d62ad 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java @@ -10,16 +10,41 @@ import java.util.List; */ public class ExcelExportEntity extends ExcelBaseEntity { - private int width; - private int height; + public ExcelExportEntity() { + + } + + public ExcelExportEntity(String name) { + super.name = name; + } + + public ExcelExportEntity(String name, Object key) { + super.name = name; + this.key = key; + } + + public ExcelExportEntity(String name, Object key, int width) { + super.name = name; + this.width = width; + this.key = key; + } + + /** + * 如果是MAP导出,这个是map的key + */ + private Object key; + + private int width = 10; + + private int height = 10; /** * 图片的类型,1是文件,2是数据库 */ - private int exportImageType; + private int exportImageType = 0; /** * 排序顺序 */ - private int orderNum; + private int orderNum = 0; /** * 是否支持换行 */ @@ -123,4 +148,12 @@ public class ExcelExportEntity extends ExcelBaseEntity { this.mergeVertical = mergeVertical; } + public Object getKey() { + return key; + } + + public void setKey(Object key) { + this.key = key; + } + } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java index 9469043..f37941f 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java @@ -11,5 +11,7 @@ public interface PoiBaseConstants { public static String SET = "set"; public static String IS = "is"; + + public static String IS_ADD_INDEX = "isAddIndex"; } 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 344f158..e9b628c 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 @@ -22,6 +22,7 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.jeecgframework.poi.excel.annotation.ExcelTarget; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; +import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; import org.jeecgframework.poi.excel.export.base.ExcelExportBase; import org.jeecgframework.poi.exception.excel.ExcelExportException; import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum; @@ -36,8 +37,9 @@ import org.slf4j.LoggerFactory; * @date 2014年6月17日 下午5:30:54 */ public class ExcelExportServer extends ExcelExportBase { - - private final static Logger logger = LoggerFactory.getLogger(ExcelExportServer.class); + + private final static Logger logger = LoggerFactory + .getLogger(ExcelExportServer.class); private static final short cellFormat = HSSFDataFormat .getBuiltinFormat("TEXT"); @@ -47,8 +49,8 @@ public class ExcelExportServer extends ExcelExportBase { public void createSheet(HSSFWorkbook workbook, ExportParams entity, Class pojoClass, Collection dataSet) { - if(logger.isDebugEnabled()){ - logger.debug("Excel export start ,class is {}",pojoClass); + if (logger.isDebugEnabled()) { + logger.debug("Excel export start ,class is {}", pojoClass); } if (workbook == null || entity == null || pojoClass == null || dataSet == null) { @@ -71,6 +73,9 @@ public class ExcelExportServer extends ExcelExportBase { Map styles = createStyles(workbook); Drawing patriarch = sheet.createDrawingPatriarch(); List excelParams = new ArrayList(); + if (entity.isAddIndex()) { + excelParams.add(indexExcelEntity()); + } // 得到所有字段 Field fileds[] = POIPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); @@ -83,7 +88,7 @@ public class ExcelExportServer extends ExcelExportBase { int titleHeight = index; setCellWith(excelParams, sheet); short rowHeight = getRowHeight(excelParams); - + setCurrentIndex(1); Iterator its = dataSet.iterator(); List tempList = new ArrayList(); while (its.hasNext()) { @@ -107,12 +112,21 @@ public class ExcelExportServer extends ExcelExportBase { } } catch (Exception e) { - e.printStackTrace(); + logger.error(e.getMessage(),e.fillInStackTrace()); throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); } } + private ExcelExportEntity indexExcelEntity() { + ExcelExportEntity entity = new ExcelExportEntity(); + entity.setOrderNum(0); + entity.setName("序号"); + entity.setWidth(10); + entity.setFormat(PoiBaseConstants.IS_ADD_INDEX); + return entity; + } + private int createHeaderAndTitle(ExportParams entity, Sheet sheet, HSSFWorkbook workbook, List excelParams) { int rows = 0, feildWidth = getFieldWidth(excelParams); @@ -298,4 +312,69 @@ public class ExcelExportServer extends ExcelExportBase { return map.get("two"); } + public void createSheetForMap(HSSFWorkbook workbook, ExportParams entity, + List entityList, + Collection> dataSet) { + if (workbook == null || entity == null || entityList == null + || dataSet == null) { + throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); + } + Sheet sheet = null; + try { + sheet = workbook.createSheet(entity.getSheetName()); + } catch (Exception e) { + // 重复遍历,出现了重名现象,创建非指定的名称Sheet + sheet = workbook.createSheet(); + } + try { + dataHanlder = entity.getDataHanlder(); + if (dataHanlder != null) { + needHanlderList = Arrays.asList(dataHanlder + .getNeedHandlerFields()); + } + // 创建表格属性 + Map styles = createStyles(workbook); + Drawing patriarch = sheet.createDrawingPatriarch(); + List excelParams = new ArrayList(); + if (entity.isAddIndex()) { + excelParams.add(indexExcelEntity()); + } + excelParams.addAll(entityList); + sortAllParams(excelParams); + int index = createHeaderAndTitle(entity, sheet, workbook, + excelParams); + int titleHeight = index; + setCellWith(excelParams, sheet); + short rowHeight = getRowHeight(excelParams); + setCurrentIndex(1); + Iterator its = dataSet.iterator(); + List tempList = new ArrayList(); + while (its.hasNext()) { + Object t = its.next(); + index += createCells(patriarch, index, t, excelParams, sheet, + workbook, styles, rowHeight); + tempList.add(t); + if (index >= MAX_NUM) + break; + } + mergeCells(sheet, excelParams, titleHeight); + + its = dataSet.iterator(); + for (int i = 0, le = tempList.size(); i < le; i++) { + its.next(); + its.remove(); + } + // 发现还有剩余list 继续循环创建Sheet + if (dataSet.size() > 0) { + createSheetForMap(workbook, entity, entityList, dataSet); + } + + } catch (Exception e) { + e.printStackTrace(); + logger.error(e.getMessage(),e.fillInStackTrace()); + throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, + e.getCause()); + } + } + } 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 d5643fb..b23e1ac 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 @@ -28,6 +28,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; 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.util.POIPublicUtil; /** @@ -38,6 +39,8 @@ import org.jeecgframework.poi.util.POIPublicUtil; */ public abstract class ExcelExportBase extends ExportBase { + private int currentIndex = 0; + /** * 合并单元格 * @@ -213,7 +216,9 @@ public abstract class ExcelExportBase extends ExportBase { Row row = sheet.createRow(index); row.setHeight(rowHeight); int maxHeight = 1, cellNum = 0; - for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { + int indexKey = createIndexCell(row, styles, index, excelParams.get(0)); + cellNum += indexKey; + for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); if (entity.getList() != null) { Collection list = (Collection) entity.getMethod().invoke( @@ -246,7 +251,7 @@ public abstract class ExcelExportBase extends ExportBase { } // 合并需要合并的单元格 cellNum = 0; - for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { + for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); if (entity.getList() != null) { cellNum += entity.getList().size(); @@ -260,6 +265,20 @@ public abstract class ExcelExportBase extends ExportBase { } + private int createIndexCell(Row row, Map styles, + int index, ExcelExportEntity excelExportEntity) { + if (excelExportEntity.getName().equals("序号") + && excelExportEntity.getFormat().equals( + PoiBaseConstants.IS_ADD_INDEX)) { + createStringCell(row, 0, currentIndex + "", + index % 2 == 0 ? getStyles(styles, false, false) + : getStyles(styles, true, false), null); + currentIndex = currentIndex + 1; + return 1; + } + return 0; + } + public CellStyle getStyles(Map styles, boolean b, boolean wrap) { return null; @@ -417,4 +436,8 @@ public abstract class ExcelExportBase extends ExportBase { return length; } + public void setCurrentIndex(int currentIndex) { + this.currentIndex = currentIndex; + } + } 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 ba40aac..8c5de1b 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 @@ -9,6 +9,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; import org.apache.commons.lang.StringUtils; import org.jeecgframework.poi.excel.annotation.Excel; @@ -26,7 +27,7 @@ import org.jeecgframework.poi.util.POIPublicUtil; * @date 2014年8月9日 下午11:01:32 */ public class ExportBase { - + protected IExcelDataHandler dataHanlder; protected List needHanlderList; @@ -54,7 +55,11 @@ public class ExportBase { targetId)) { continue; } - if (POIPublicUtil.isCollection(field.getType())) { + // 首先判断Excel 可能一下特殊数据用户回自定义处理 + if (field.getAnnotation(Excel.class) != null) { + excelParams.add(createExcelExportEntity(field, targetId, + pojoClass, getMethods)); + } else if (POIPublicUtil.isCollection(field.getType())) { ExcelCollection excel = field .getAnnotation(ExcelCollection.class); ParameterizedType pt = (ParameterizedType) field @@ -73,9 +78,6 @@ public class ExportBase { pojoClass)); excelEntity.setList(list); excelParams.add(excelEntity); - } else if (POIPublicUtil.isJavaClass(field)) { - excelParams.add(createExcelExportEntity(field, targetId, - pojoClass, getMethods)); } else { List newMethods = new ArrayList(); if (getMethods != null) { @@ -108,7 +110,12 @@ public class ExportBase { throws Exception { Excel excel = field.getAnnotation(Excel.class); ExcelExportEntity excelEntity = new ExcelExportEntity(); - excelEntity.setType(excel.type()); + try { + excelEntity.setType(excel.type()); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } getExcelField(targetId, field, excelEntity, excel, pojoClass); if (getMethods != null) { List newMethods = new ArrayList(); @@ -203,8 +210,10 @@ public class ExportBase { String fieldname = field.getName(); excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass)); } + /** * 根据注解获取行高 + * * @param excelParams * @return */ @@ -223,7 +232,6 @@ public class ExportBase { } return (short) (maxHeight * 50); } - /** * 对字段根据用户设置排序 @@ -236,7 +244,7 @@ public class ExportBase { } } } - + /** * 获取填如这个cell的值,提供一些附加功能 * @@ -247,9 +255,14 @@ public class ExportBase { */ public Object getCellValue(ExcelExportEntity entity, Object obj) throws Exception { - Object value = entity.getMethods() != null ? getFieldBySomeMethod( - entity.getMethods(), obj) : entity.getMethod().invoke(obj, - new Object[] {}); + Object value; + if (obj instanceof Map) { + return ((Map) obj).get(entity.getKey()); + } else { + value = entity.getMethods() != null ? getFieldBySomeMethod( + entity.getMethods(), obj) : entity.getMethod().invoke(obj, + new Object[] {}); + } if (needHanlderList != null && needHanlderList.contains(entity.getName())) { value = dataHanlder.exportHandler(obj, entity.getName(), value); @@ -290,7 +303,7 @@ public class ExportBase { } return value; } - + /** * 多个反射获取值 * 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 dbbd185..e23e39f 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 @@ -32,6 +32,7 @@ import org.jeecgframework.poi.util.POIPublicUtil; * @version 1.0 */ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { + public Workbook createExcleByTemplate(TemplateExportParams params, Class pojoClass, Collection dataSet, Map map) { @@ -44,19 +45,13 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { // step 2. 判断模板的Excel类型,解析模板 try { wb = getCloneWorkBook(params); - // step 3. 删除其他的sheet - for (int i = wb.getNumberOfSheets() - 1; i >= 0; i--) { - if (i != params.getSheetNum()) { - wb.removeSheetAt(i); - } - } if (StringUtils.isNotEmpty(params.getSheetName())) { wb.setSheetName(0, params.getSheetName()); } - // step 4. 解析模板 + // step 3. 解析模板 parseTemplate(wb.getSheetAt(0), map); if (dataSet != null) { - // step 5. 正常的数据填充 + // step 4. 正常的数据填充 dataHanlder = params.getDataHanlder(); if (dataHanlder != null) { needHanlderList = Arrays.asList(dataHanlder 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 96da100..c512acb 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 @@ -141,6 +141,9 @@ public class CellValueServer { */ private Object getCellValue(String xclass, Cell cell, ExcelImportEntity entity) { + if(cell == null){ + return ""; + } Object result = null; // 日期格式比较特殊,和cell格式不一致 if (xclass.equals("class java.util.Date")) { 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 0d745a1..3755902 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 @@ -94,6 +94,9 @@ public class ExcelImportServer { } Map pictures; for (int i = 0; i < params.getSheetNum(); i++) { + if(logger.isDebugEnabled()){ + logger.debug(" start to read excel by is ,startTime is {}", new Date().getTime()); + } if (isXSSFWorkbook) { pictures = POIPublicUtil.getSheetPictrues07( (XSSFSheet) book.getSheetAt(i), (XSSFWorkbook) book); @@ -101,8 +104,14 @@ public class ExcelImportServer { pictures = POIPublicUtil.getSheetPictrues03( (HSSFSheet) book.getSheetAt(i), (HSSFWorkbook) book); } + if(logger.isDebugEnabled()){ + logger.debug(" end to read excel by is ,endTime is {}", new Date().getTime()); + } result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures)); + if(logger.isDebugEnabled()){ + logger.debug(" end to read excel list by pos ,endTime is {}", new Date().getTime()); + } } if (params.isNeedSave()) { saveThisExcel(params, pojoClass, isXSSFWorkbook, book); @@ -141,8 +150,7 @@ public class ExcelImportServer { if (params.getSaveUrl().equals("upload/excelUpload")) { url = pojoClass.getName().split("\\.")[pojoClass.getName().split( "\\.").length - 1]; - return params.getSaveUrl() + "/" - + url.substring(0, url.lastIndexOf("Entity")); + return params.getSaveUrl() + "/" + url; } return params.getSaveUrl(); } diff --git a/easypoi-test/.classpath b/easypoi-test/.classpath index f67a1d3..f32149e 100644 --- a/easypoi-test/.classpath +++ b/easypoi-test/.classpath @@ -11,19 +11,19 @@ - + + - + - + - diff --git a/easypoi-test/pom.xml b/easypoi-test/pom.xml index 77aa8d9..86c94e4 100644 --- a/easypoi-test/pom.xml +++ b/easypoi-test/pom.xml @@ -4,7 +4,7 @@ org.jeecgframework easypoi - 2.0.2 + 2.0.6-SNAPSHOT easypoi-test diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClient.java b/easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClient.java new file mode 100644 index 0000000..563b6e2 --- /dev/null +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClient.java @@ -0,0 +1,146 @@ +package org.jeecgframework.poi.entity; + +import java.util.Date; + + +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelEntity; + +/** + * @Title: Entity + * @Description: 通讯录 + * @author JueYue + * @date 2014-09-22 16:03:32 + * @version V1.0 + * + */ +@SuppressWarnings("serial") +public class MsgClient implements java.io.Serializable { + /** id */ + private java.lang.String id; + // 电话号码(主键) + @Excel(name = "电话号码") + private String clientPhone = null; + // 客户姓名 + @Excel(name = "姓名") + private String clientName = null; + // 所属分组 + @ExcelEntity + private MsgClientGroup group = null; + // 备注 + @Excel(name = "备注") + private String remark = null; + // 生日 + @Excel(name = "出生日期") + private Date birthday = null; + // 创建人 + private String createBy = null; + + /** + * 方法: 取得java.lang.String + * + * @return: java.lang.String id + */ + + public java.lang.String getId() { + return this.id; + } + + /** + * 方法: 设置java.lang.String + * + * @param: java.lang.String id + */ + public void setId(java.lang.String id) { + this.id = id; + } + + /** + * 方法: 取得java.lang.String + * + * @return: java.lang.String 电话号码 + */ + public java.lang.String getClientPhone() { + return this.clientPhone; + } + + /** + * 方法: 设置java.lang.String + * + * @param: java.lang.String 电话号码 + */ + public void setClientPhone(java.lang.String clientPhone) { + this.clientPhone = clientPhone; + } + + public MsgClientGroup getGroup() { + return group; + } + + public void setGroup(MsgClientGroup group) { + this.group = group; + } + + /** + * 方法: 取得java.lang.String + * + * @return: java.lang.String 客户姓名 + */ + public java.lang.String getClientName() { + return this.clientName; + } + + /** + * 方法: 设置java.lang.String + * + * @param: java.lang.String 客户姓名 + */ + public void setClientName(java.lang.String clientName) { + this.clientName = clientName; + } + + /** + * 方法: 取得java.lang.String + * + * @return: java.lang.String 备注 + */ + public java.lang.String getRemark() { + return this.remark; + } + + /** + * 方法: 设置java.lang.String + * + * @param remark + * + * @param: java.lang.String 备注 + */ + public void setRemark(java.lang.String remark) { + this.remark = remark; + } + + /** + * 方法: 取得java.util.Date + * + * @return: java.util.Date 生日 + */ + public java.util.Date getBirthday() { + return this.birthday; + } + + /** + * 方法: 设置java.util.Date + * + * @param: java.util.Date 生日 + */ + public void setBirthday(java.util.Date birthday) { + this.birthday = birthday; + } + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } +} diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClientGroup.java b/easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClientGroup.java new file mode 100644 index 0000000..21d8a35 --- /dev/null +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/entity/MsgClientGroup.java @@ -0,0 +1,57 @@ +package org.jeecgframework.poi.entity; + +import java.io.Serializable; +import java.util.List; + + +import org.jeecgframework.poi.excel.annotation.Excel; + + +/** + * 客户分组表 + * + * @author yjl + * + */ +public class MsgClientGroup implements Serializable{ + + + /** + * + */ + private static final long serialVersionUID = 6946265640897464878L; + + // 组名 + @Excel(name ="分组") + private String groupName = null; + /** + * 创建人 + */ + private String createBy; + + // 一个组下 可能存在N多客户 + //private List clients = null; + + public String getGroupName() { + return groupName; + } + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + /*@org.codehaus.jackson.annotate.JsonIgnore + @OneToMany(cascade = CascadeType.REMOVE,fetch = FetchType.LAZY,mappedBy = "group") + public List getClients() { + return clients; + } + + public void setClients(List clients) { + this.clients = clients; + }*/ + public String getCreateBy() { + return createBy; + } + public void setCreateBy(String createBy) { + this.createBy = createBy; + } +} diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java index 8a6cf76..35a49a8 100644 --- a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java @@ -4,9 +4,11 @@ import static org.junit.Assert.*; import java.io.File; import java.util.Collection; +import java.util.Date; import java.util.List; import org.jeecgframework.poi.entity.CourseEntity; +import org.jeecgframework.poi.entity.MsgClient; import org.jeecgframework.poi.entity.StudentEntity; import org.jeecgframework.poi.excel.entity.ImportParams; import org.junit.Test; @@ -18,11 +20,13 @@ public class ExcelImportUtilTest { ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(2); + //params.setSheetNum(9); + params.setNeedSave(true); + long start = new Date().getTime(); List list = ExcelImportUtil.importExcel(new File( "d:/tt.xls"), CourseEntity.class, params); - for (int i = 0; i < list.size(); i++) { - System.out.println(list.get(i).getName()); - } + System.out.println(list.size() + "-----" + + (new Date().getTime() - start)); } } diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/doc/exportTemp.xls b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/doc/exportTemp.xls new file mode 100644 index 0000000000000000000000000000000000000000..9b57ebda6c1e9b613de51297307765caae65947f GIT binary patch literal 23552 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 MsH}D7tuGe%A0iaApa1{> literal 0 HcmV?d00001 diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportForMap.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportForMap.java new file mode 100644 index 0000000..43af4b3 --- /dev/null +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportForMap.java @@ -0,0 +1,51 @@ +package org.jeecgframework.poi.excel.test; + +import static org.junit.Assert.*; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.jeecgframework.poi.entity.TeacherEntity; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; + +public class ExcelExportForMap { + + @Test + public void test() { + try { + List entity = new ArrayList(); + entity.add(new ExcelExportEntity("姓名", "name")); + entity.add(new ExcelExportEntity("性别", "sex")); + + List> list = new ArrayList>(); + Map map; + for (int i = 0; i < 10; i++) { + map = new HashMap(); + map.put("name", "1" + i); + map.put("sex", "2" + i); + list.add(map); + } + + HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( + "测试", "测试"), entity, list); + FileOutputStream fos = new FileOutputStream("d:/tt.xls"); + workbook.write(fos); + fos.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportTemplateTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportTemplateTest.java new file mode 100644 index 0000000..deb0199 --- /dev/null +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportTemplateTest.java @@ -0,0 +1,108 @@ +package org.jeecgframework.poi.excel.test; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.poi.ss.usermodel.Workbook; +import org.jeecgframework.poi.entity.CourseEntity; +import org.jeecgframework.poi.entity.StudentEntity; +import org.jeecgframework.poi.entity.TeacherEntity; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.TemplateExportParams; +import org.junit.Before; +import org.junit.Test; + +public class ExcelExportTemplateTest { + + List list = new ArrayList(); + CourseEntity courseEntity; + + @Before + public void testBefore() { + courseEntity = new CourseEntity(); + courseEntity.setId("1131"); + courseEntity.setName("小白"); + + TeacherEntity teacherEntity = new TeacherEntity(); + teacherEntity.setId("12131231"); + teacherEntity.setName("你们"); + courseEntity.setTeacher(teacherEntity); + + teacherEntity = new TeacherEntity(); + teacherEntity.setId("121312314312421131"); + teacherEntity.setName("老王"); + courseEntity.setShuxueteacher(teacherEntity); + + StudentEntity studentEntity = new StudentEntity(); + studentEntity.setId("11231"); + studentEntity.setName("撒旦法司法局"); + studentEntity.setBirthday(new Date()); + studentEntity.setSex(1); + List studentList = new ArrayList(); + studentList.add(studentEntity); + studentList.add(studentEntity); + courseEntity.setStudents(studentList); + + for (int i = 0; i < 3; i++) { + list.add(courseEntity); + } + } + + //@Test + public void one () throws Exception{ + TemplateExportParams params = new TemplateExportParams(); + params.setHeadingRows(2); + params.setHeadingStartRow(2); + Map map = new HashMap(); + map.put("year", "2013"); + map.put("sunCourses", list.size()); + Map obj = new HashMap(); + map.put("obj", obj); + obj.put("name", list.size()); + params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls"); + Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list, + map); + File savefile = new File("d:/"); + if (!savefile.exists()) { + savefile.mkdirs(); + } + FileOutputStream fos = new FileOutputStream("d:/exportTemp.xls"); + book.write(fos); + fos.close(); + + } + @Test + public void two () throws Exception{ + TemplateExportParams params = new TemplateExportParams(); + Map map = new HashMap(); + map.put("month", 10); + Map temp; + for(int i = 1;i<8;i++){ + temp = new HashMap(); + temp.put("per", i*10); + temp.put("mon", i*1000); + temp.put("summon", i*10000); + map.put("i"+i, temp); + } + params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls"); + params.setSheetNum(1); + Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list, + map); + File savefile = new File("d:/"); + if (!savefile.exists()) { + savefile.mkdirs(); + } + FileOutputStream fos = new FileOutputStream("d:/exportTemp2.xls"); + book.write(fos); + fos.close(); + + } + + +} diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilIdTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilIdTest.java index c44b276..f1c91c4 100644 --- a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilIdTest.java +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilIdTest.java @@ -59,7 +59,6 @@ public class ExcelExportUtilIdTest { telist.add(teacherEntity); } } - /** * 单行表头导出测试 @@ -68,8 +67,10 @@ public class ExcelExportUtilIdTest { */ @Test public void testExportExcel() throws Exception { - HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( - "2412312", "测试", "测试"), TeacherEntity.class, telist); + ExportParams params = new ExportParams("2412312", "测试", "测试"); + params.setAddIndex(true); + HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params, + TeacherEntity.class, telist); FileOutputStream fos = new FileOutputStream("d:/tt.xls"); workbook.write(fos); fos.close(); diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilTest.java index 17a99ee..094b9a8 100644 --- a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilTest.java +++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilTest.java @@ -62,7 +62,7 @@ public class ExcelExportUtilTest { * * @throws Exception */ - @Test + //@Test public void testExportExcel() throws Exception { Date start = new Date(); HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( @@ -123,9 +123,10 @@ public class ExcelExportUtilTest { * * @throws Exception */ - //@Test + @Test public void oneHundredThousandRowTest() throws Exception { - for (int i = 0; i < 250000; i++) { + + for (int i = 0; i < 250; i++) { list.add(courseEntity); } Date start = new Date(); @@ -139,6 +140,14 @@ public class ExcelExportUtilTest { FileOutputStream fos = new FileOutputStream("d:/tt.xls"); workbook.write(fos); fos.close(); + savefile = new File("d:/1"); + if (!savefile.exists()) { + savefile.setWritable(true, false); + savefile.mkdirs(); + } + fos = new FileOutputStream("d:/1/tt3.xls"); + workbook.write(fos); + fos.close(); } } diff --git a/easypoi-test/src/main/resources/log4j.properties b/easypoi-test/src/main/resources/log4j.properties new file mode 100644 index 0000000..d15e8b4 --- /dev/null +++ b/easypoi-test/src/main/resources/log4j.properties @@ -0,0 +1,11 @@ +log4j.rootLogger=debug,A1,R +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.Target=System.out +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[%c]%m%n + +log4j.appender.R=org.apache.log4j.RollingFileAppender +log4j.appender.R.File=/home/logs/easypoi.info +log4j.appender.R.MaxFileSize=10MB +log4j.appender.R.layout=org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n \ No newline at end of file diff --git a/easypoi-web/.classpath b/easypoi-web/.classpath index f67a1d3..f32149e 100644 --- a/easypoi-web/.classpath +++ b/easypoi-web/.classpath @@ -11,19 +11,19 @@ - + + - + - + - diff --git a/easypoi-web/.project b/easypoi-web/.project index 2197815..a06e826 100644 --- a/easypoi-web/.project +++ b/easypoi-web/.project @@ -15,8 +15,14 @@ + + org.springframework.ide.eclipse.core.springbuilder + + + + org.springframework.ide.eclipse.core.springnature org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature diff --git a/easypoi-web/pom.xml b/easypoi-web/pom.xml index 2e1cea2..529dca1 100644 --- a/easypoi-web/pom.xml +++ b/easypoi-web/pom.xml @@ -4,10 +4,9 @@ org.jeecgframework easypoi - 2.0.2 + 2.0.6-SNAPSHOT easypoi-web - diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/MapExcelConstants.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/MapExcelConstants.java new file mode 100644 index 0000000..6d67a29 --- /dev/null +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/MapExcelConstants.java @@ -0,0 +1,22 @@ +package org.jeecgframework.poi.excel.entity.vo; + +/** + * 正常导出Excel + * @Author JueYue on 14-3-8. + * 静态常量 + */ +public interface MapExcelConstants extends BasePOIConstants { + /** + * 单Sheet导出 + */ + public final static String JEECG_MAP_EXCEL_VIEW = "jeecgMapExcelView"; + /** + * Entity List + */ + public final static String ENTITY_LIST = "data"; + /** + * 数据列表 + */ + public final static String MAP_LIST = "mapList"; + +} diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java new file mode 100644 index 0000000..04114cb --- /dev/null +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java @@ -0,0 +1,56 @@ +package org.jeecgframework.poi.excel.view; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; +import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants; +import org.jeecgframework.poi.excel.export.ExcelExportServer; +import org.springframework.web.servlet.view.document.AbstractExcelView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * Map 对象接口 + * + * @author JueYue + * @date 2014年11月25日 下午3:26:32 + */ +@SuppressWarnings("unchecked") +public class JeecgMapExcelView extends AbstractExcelView { + + @Override + protected void buildExcelDocument(Map model, + HSSFWorkbook hssfWorkbook, HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse) throws Exception { + String codedFileName = "临时文件.xls"; + if (model.containsKey(MapExcelConstants.FILE_NAME)) { + codedFileName = (String) model.get(MapExcelConstants.FILE_NAME) + + ".xls"; + } + if (isIE(httpServletRequest)) { + codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); + } else { + codedFileName = new String(codedFileName.getBytes("UTF-8"), + "ISO-8859-1"); + } + httpServletResponse.setHeader("content-disposition", + "attachment;filename=" + codedFileName); + new ExcelExportServer().createSheetForMap(hssfWorkbook, + (ExportParams) model.get(MapExcelConstants.PARAMS), + (List) model + .get(MapExcelConstants.ENTITY_LIST), + (Collection>) model + .get(MapExcelConstants.MAP_LIST)); + } + + public boolean isIE(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request + .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true + : false; + } +} diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgSingleExcelView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgSingleExcelView.java index 07a7674..0d2eef7 100644 --- a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgSingleExcelView.java +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgSingleExcelView.java @@ -28,17 +28,24 @@ public class JeecgSingleExcelView extends AbstractExcelView { codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) + ".xls"; } + if (isIE(httpServletRequest)) { + codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); + } else { + codedFileName = new String(codedFileName.getBytes("UTF-8"), + "ISO-8859-1"); + } httpServletResponse.setHeader("content-disposition", - "attachment;filename=" - + new String(codedFileName.getBytes(), "iso8859-1")); + "attachment;filename="+codedFileName); if (model.containsKey(NormalExcelConstants.MAP_LIST)) { List> list = (List>) model .get(NormalExcelConstants.MAP_LIST); for (Map map : list) { - new ExcelExportServer().createSheet(hssfWorkbook, - (ExportParams) map.get(NormalExcelConstants.PARAMS), - (Class) map.get(NormalExcelConstants.CLASS), - (Collection) map.get(NormalExcelConstants.DATA_LIST)); + new ExcelExportServer() + .createSheet(hssfWorkbook, (ExportParams) map + .get(NormalExcelConstants.PARAMS), + (Class) map.get(NormalExcelConstants.CLASS), + (Collection) map + .get(NormalExcelConstants.DATA_LIST)); } } else { new ExcelExportServer().createSheet(hssfWorkbook, @@ -47,4 +54,10 @@ public class JeecgSingleExcelView extends AbstractExcelView { (Collection) model.get(NormalExcelConstants.DATA_LIST)); } } + + public boolean isIE(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request + .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true + : false; + } } diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java index 6729ae3..12957b1 100644 --- a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java @@ -38,8 +38,14 @@ public class JeecgTemplateExcelView extends AbstractView { codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) + ".xls"; } - response.setHeader("content-disposition", "attachment;filename=" - + new String(codedFileName.getBytes(), "iso8859-1")); + if (isIE(request)) { + codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); + } else { + codedFileName = new String(codedFileName.getBytes("UTF-8"), + "ISO-8859-1"); + } + response.setHeader("content-disposition", + "attachment;filename="+codedFileName); Workbook workbook = ExcelExportUtil.exportExcel( (TemplateExportParams)model.get(TemplateExcelConstants.PARAMS), (Class) model.get(TemplateExcelConstants.CLASS), @@ -49,4 +55,10 @@ public class JeecgTemplateExcelView extends AbstractView { workbook.write(out); out.flush(); } + + public boolean isIE(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request + .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true + : false; + } } diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java index 694adf8..3e449eb 100644 --- a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java @@ -35,12 +35,26 @@ public class JeecgTemplateWordView extends AbstractView { codedFileName = (String) model.get(TemplateWordConstants.FILE_NAME) + ".docx"; } + if (isIE(request)) { + codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); + } else { + codedFileName = new String(codedFileName.getBytes("UTF-8"), + "ISO-8859-1"); + } response.setHeader("content-disposition", "attachment;filename=" - + new String(codedFileName.getBytes(), "iso8859-1")); - XWPFDocument document = WordExportUtil.exportWord07((String)model.get(TemplateWordConstants.URL), - (Map)model.get(TemplateWordConstants.MAP_DATA)); + + codedFileName); + XWPFDocument document = WordExportUtil + .exportWord07((String) model.get(TemplateWordConstants.URL), + (Map) model + .get(TemplateWordConstants.MAP_DATA)); ServletOutputStream out = response.getOutputStream(); document.write(out); out.flush(); } + + public boolean isIE(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request + .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true + : false; + } } diff --git a/package.bat b/package.bat index 84e3f30..04a1285 100644 --- a/package.bat +++ b/package.bat @@ -1 +1 @@ -cmd /k mvn package \ No newline at end of file +cmd /k mvn package -DskipTest \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6146c2f..10ae36b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.jeecgframework easypoi - 2.0.2 + 2.0.6-SNAPSHOT pom easypoi @@ -11,18 +11,19 @@ easypoi-web easypoi-test - + www.jeecg.org office 工具类 基于 poi - + JueYue qrb.jueyue@gmail.com - + + 2.0.6-SNAPSHOT 3.9 3.9 3.9 @@ -109,7 +110,7 @@ 2.5 provided - + junit @@ -117,16 +118,17 @@ ${junit.version} test - + org.jeecgframework easypoi-base - 2.0.2 + ${sub.version} + postaop-pay-platform-release @@ -134,10 +136,15 @@ postaop-pay-platform-snapshot - http://192.168.0.99:8081/nexus/content/repositoriespostaop-common-snapshot/ + http://192.168.0.99:8081/nexus/content/repositories/postaop-common-snapshot/ + + scm:svn:https://192.168.0.99:8443/svn/postaop-platform/qdcrm/trunk/ + scm:svn:https://192.168.0.99:8443/svn/postaop-platform/qdcrm/trunk/ + +