diff --git a/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java b/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java index 8e4f485..68cd7af 100644 --- a/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java +++ b/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java @@ -42,12 +42,14 @@ public @interface Excel { * 导入的时间格式,以这个是否为空来判断是否需要格式化日期 */ public String importFormat() default ""; - - /** * 时间格式,相当于同时设置了exportFormat 和 importFormat */ public String format() default ""; + /** + * 时间时区 + */ + public String timezone() default ""; /** * 数字格式化,参数是Pattern,使用的对象是DecimalFormat */ diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java index 7ab56f8..628a8d3 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java @@ -1,13 +1,13 @@ /** * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and @@ -15,15 +15,6 @@ */ package cn.afterturn.easypoi.excel; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; @@ -31,76 +22,71 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.export.ExcelBatchExportService; import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil; +import cn.afterturn.easypoi.handler.inter.IExcelExportServer; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.util.Collection; +import java.util.List; +import java.util.Map; /** * excel 导出工具类 - * + * * @author JueYue * @version 1.0 - * 2013-10-17 + * 2013-10-17 */ public final class ExcelExportUtil { - public static int USE_SXSSF_LIMIT = 100000; - public static final String SHEET_NAME = "sheetName"; + public static int USE_SXSSF_LIMIT = 100000; + public static final String SHEET_NAME = "sheetName"; private ExcelExportUtil() { } /** - * 大数据量导出,方便导出时集合不用一次生成,可以多次生成,多次调用, - * 调用完成或需要调用关闭函数(closeExportBigExcel) + * 大数据量导出 * - * @param entity - * 表格标题属性 - * @param pojoClass - * Excel对象Class - * @param dataSet - * Excel对象数据List + * @param entity 表格标题属性 + * @param pojoClass Excel对象Class + * @param server 查询数据的接口 + * @param queryParams 查询数据的参数 */ public static Workbook exportBigExcel(ExportParams entity, Class pojoClass, - Collection dataSet) { - ExcelBatchExportService batchService = ExcelBatchExportService - .getExcelBatchExportService(entity, pojoClass); - return batchService.appendData(dataSet); + IExcelExportServer server, Object queryParams) { + ExcelBatchExportService batchServer = new ExcelBatchExportService(); + batchServer.init(entity, pojoClass); + return batchServer.exportBigExcel(server, queryParams); } /** - * 大数据量导出,方便导出时集合不用一次生成,可以多次生成,多次调用, - * 调用完成或需要调用关闭函数(closeExportBigExcel) + * 大数据量导出 + * * @param entity * @param excelParams - * @param dataSet + * @param server 查询数据的接口 + * @param queryParams 查询数据的参数 * @return */ public static Workbook exportBigExcel(ExportParams entity, List excelParams, - Collection dataSet) { - ExcelBatchExportService batchService = ExcelBatchExportService - .getExcelBatchExportService(entity, excelParams); - return batchService.appendData(dataSet); + IExcelExportServer server, Object queryParams) { + ExcelBatchExportService batchServer = new ExcelBatchExportService(); + batchServer.init(entity, excelParams); + return batchServer.exportBigExcel(server, queryParams); } - /** - * 执行完成上述方法后,请关闭 - */ - public static void closeExportBigExcel() { - ExcelBatchExportService batchService = ExcelBatchExportService.getCurrentExcelBatchExportService(); - if(batchService != null) { - batchService.closeExportBigExcel(); - } - } /** - * @param entity - * 表格标题属性 - * @param pojoClass - * Excel对象Class - * @param dataSet - * Excel对象数据List + * @param entity 表格标题属性 + * @param pojoClass Excel对象Class + * @param dataSet Excel对象数据List */ public static Workbook exportExcel(ExportParams entity, Class pojoClass, Collection dataSet) { - Workbook workbook = getWorkbook(entity.getType(),dataSet.size()); + Workbook workbook = getWorkbook(entity.getType(), dataSet.size()); new ExcelExportService().createSheet(workbook, entity, pojoClass, dataSet); return workbook; } @@ -117,65 +103,57 @@ public final class ExcelExportUtil { /** * 根据Map创建对应的Excel - * @param entity - * 表格标题属性 - * @param entityList - * Map对象列表 - * @param dataSet - * Excel对象数据List + * + * @param entity 表格标题属性 + * @param entityList Map对象列表 + * @param dataSet Excel对象数据List */ public static Workbook exportExcel(ExportParams entity, List entityList, Collection dataSet) { - Workbook workbook = getWorkbook(entity.getType(),dataSet.size());; + Workbook workbook = getWorkbook(entity.getType(), dataSet.size()); + ; new ExcelExportService().createSheetForMap(workbook, entity, entityList, dataSet); return workbook; } /** * 根据Map创建对应的Excel(一个excel 创建多个sheet) - * - * @param list - * 多个Map key title 对应表格Title key entity 对应表格对应实体 key data - * Collection 数据 + * + * @param list 多个Map key title 对应表格Title key entity 对应表格对应实体 key data + * Collection 数据 * @return */ public static Workbook exportExcel(List> list, ExcelType type) { - Workbook workbook = getWorkbook(type,0); + Workbook workbook = getWorkbook(type, 0); for (Map map : list) { ExcelExportService service = new ExcelExportService(); service.createSheet(workbook, (ExportParams) map.get("title"), - (Class) map.get("entity"), (Collection) map.get("data")); + (Class) map.get("entity"), (Collection) map.get("data")); } return workbook; } /** * 导出文件通过模板解析,不推荐这个了,推荐全部通过模板来执行处理 - * - * @param params - * 导出参数类 - * @param pojoClass - * 对应实体 - * @param dataSet - * 实体集合 - * @param map - * 模板集合 + * + * @param params 导出参数类 + * @param pojoClass 对应实体 + * @param dataSet 实体集合 + * @param map 模板集合 * @return */ @Deprecated public static Workbook exportExcel(TemplateExportParams params, Class pojoClass, Collection dataSet, Map map) { return new ExcelExportOfTemplateUtil().createExcelByTemplate(params, pojoClass, dataSet, - map); + map); } /** * 导出文件通过模板解析只有模板,没有集合 - * - * @param params - * 导出参数类 - * @param map - * 模板集合 + * + * @param params 导出参数类 + * @param map 模板集合 * @return */ public static Workbook exportExcel(TemplateExportParams params, Map map) { @@ -185,10 +163,9 @@ public final class ExcelExportUtil { /** * 导出文件通过模板解析只有模板,没有集合 * 每个sheet对应一个map,导出到处,key是sheet的NUM - * @param params - * 导出参数类 - * @param map - * 模板集合 + * + * @param params 导出参数类 + * @param map 模板集合 * @return */ public static Workbook exportExcel(Map> map, @@ -199,14 +176,13 @@ public final class ExcelExportUtil { /** * 导出文件通过模板解析只有模板,没有集合 * 每个sheet对应一个list,按照数量进行导出排序,key是sheet的NUM - * @param params - * 导出参数类 - * @param map - * 模板集合 + * + * @param params 导出参数类 + * @param map 模板集合 * @return */ public static Workbook exportExcelClone(Map>> map, - TemplateExportParams params) { + TemplateExportParams params) { return new ExcelExportOfTemplateUtil().createExcelCloneByTemplate(params, map); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/enmus/CellValueType.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/enmus/CellValueType.java index ae6f551..c1bdcff 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/enmus/CellValueType.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/enmus/CellValueType.java @@ -1,13 +1,13 @@ /** * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and @@ -22,6 +22,6 @@ package cn.afterturn.easypoi.excel.entity.enmus; */ public enum CellValueType { - String , Number , Boolean , Date , TElement , Null ,Formula, None; + InlineStr, String, Number, Boolean, Date, TElement, Null, Formula, None; } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java index b07f272..834fc63 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java @@ -66,6 +66,10 @@ public class ExcelBaseEntity { * 固定的列 */ private Integer fixedIndex; + /** + * 时区 + */ + private String timezone; private List methods; @@ -162,5 +166,11 @@ public class ExcelBaseEntity { this.fixedIndex = fixedIndex; } + public String getTimezone() { + return timezone; + } + public void setTimezone(String timezone) { + this.timezone = timezone; + } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/vo/BaseEntityTypeConstants.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/vo/BaseEntityTypeConstants.java index 4cdd29b..6e3d83e 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/vo/BaseEntityTypeConstants.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/vo/BaseEntityTypeConstants.java @@ -12,7 +12,8 @@ package cn.afterturn.easypoi.excel.entity.vo; */ public interface BaseEntityTypeConstants { public final static Integer STRING_TYPE = 1; - public final static Integer DOUBLE_TYPE = 10; public final static Integer IMAGE_TYPE = 2; public final static Integer FUNCTION_TYPE = 3; + public final static Integer DATE_TYPE = 4; + public final static Integer DOUBLE_TYPE = 10; } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java index 31b6d65..27edc7a 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java @@ -7,6 +7,7 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; import cn.afterturn.easypoi.exception.excel.ExcelExportException; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; +import cn.afterturn.easypoi.handler.inter.IExcelExportServer; import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil; import cn.afterturn.easypoi.util.PoiPublicUtil; import org.apache.poi.ss.usermodel.Drawing; @@ -17,23 +18,24 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; import java.lang.reflect.Field; import java.util.*; +import static cn.afterturn.easypoi.excel.ExcelExportUtil.USE_SXSSF_LIMIT; + /** * 提供批次插入服务 + * * @author JueYue * 2016年8月29日 */ public class ExcelBatchExportService extends ExcelExportService { - private static ThreadLocal THREAD_LOCAL = new ThreadLocal(); - - private Workbook workbook; - private Sheet sheet; - private List excelParams; - private ExportParams entity; - private int titleHeight; - private Drawing patriarch; - private short rowHeight; - private int index; + private Workbook workbook; + private Sheet sheet; + private List excelParams; + private ExportParams entity; + private int titleHeight; + private Drawing patriarch; + private short rowHeight; + private int index; public void init(ExportParams entity, Class pojoClass) { List excelParams = createExcelExportEntityList(entity, pojoClass); @@ -49,7 +51,7 @@ public class ExcelBatchExportService extends ExcelExportService { super.type = entity.getType(); createSheet(workbook, entity, excelParams); if (entity.getMaxNum() == 0) { - entity.setMaxNum(1000000); + entity.setMaxNum(USE_SXSSF_LIMIT); } insertDataToSheet(workbook, entity, excelParams, null, sheet); } @@ -61,11 +63,11 @@ public class ExcelBatchExportService extends ExcelExportService { excelParams.add(indexExcelEntity(entity)); } // 得到所有字段 - Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); - ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); - String targetId = etarget == null ? null : etarget.value(); + 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, null); + null, null); sortAllParams(excelParams); return excelParams; @@ -78,7 +80,7 @@ public class ExcelBatchExportService extends ExcelExportService { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Excel export start ,List is {}", excelParams); LOGGER.debug("Excel version is {}", - entity.getType().equals(ExcelType.HSSF) ? "03" : "07"); + entity.getType().equals(ExcelType.HSSF) ? "03" : "07"); } if (workbook == null || entity == null || excelParams == null) { throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); @@ -100,7 +102,7 @@ public class ExcelBatchExportService extends ExcelExportService { sheet = workbook.createSheet(); index = 0; } - + Iterator its = dataSet.iterator(); while (its.hasNext()) { Object t = its.next(); @@ -127,7 +129,7 @@ public class ExcelBatchExportService extends ExcelExportService { i18nHandler = entity.getI18nHandler(); // 创建表格样式 setExcelExportStyler((IExcelExportStyler) entity.getStyle() - .getConstructor(Workbook.class).newInstance(workbook)); + .getConstructor(Workbook.class).newInstance(workbook)); patriarch = PoiExcelGraphDataUtil.getDrawingPatriarch(sheet); List excelParams = new ArrayList(); if (entity.isAddIndex()) { @@ -136,10 +138,10 @@ public class ExcelBatchExportService extends ExcelExportService { excelParams.addAll(entityList); sortAllParams(excelParams); this.index = entity.isCreateHeadRows() - ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0; + ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0; titleHeight = index; setCellWith(excelParams, sheet); - setColumnHidden(excelParams,sheet); + setColumnHidden(excelParams, sheet); rowHeight = getRowHeight(excelParams); setCurrentIndex(1); } catch (Exception e) { @@ -148,39 +150,25 @@ public class ExcelBatchExportService extends ExcelExportService { } } - public static ExcelBatchExportService getExcelBatchExportService(ExportParams entity, - Class pojoClass) { - if (THREAD_LOCAL.get() == null) { - ExcelBatchExportService batchServer = new ExcelBatchExportService(); - batchServer.init(entity, pojoClass); - THREAD_LOCAL.set(batchServer); - } - return THREAD_LOCAL.get(); - } - - public static ExcelBatchExportService getExcelBatchExportService(ExportParams entity, - List excelParams) { - if (THREAD_LOCAL.get() == null) { - ExcelBatchExportService batchServer = new ExcelBatchExportService(); - batchServer.init(entity, excelParams); - THREAD_LOCAL.set(batchServer); - } - return THREAD_LOCAL.get(); - } - - public static ExcelBatchExportService getCurrentExcelBatchExportService() { - return THREAD_LOCAL.get(); - } - - public void closeExportBigExcel() { + public Workbook closeExportBigExcel() { if (entity.getFreezeCol() != 0) { sheet.createFreezePane(entity.getFreezeCol(), titleHeight, entity.getFreezeCol(), titleHeight); } mergeCells(sheet, excelParams, titleHeight); // 创建合计信息 addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet); - THREAD_LOCAL.remove(); + return workbook; + } + public Workbook exportBigExcel(IExcelExportServer server, Object queryParams) { + int page = 1; + List list = server + .selectListForExcelExport(queryParams, page++); + while (list != null && list.size() > 0) { + appendData(list); + list = server.selectListForExcelExport(queryParams, page++); + } + return closeExportBigExcel(); } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java index 02e62f5..ea94277 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java @@ -21,6 +21,7 @@ import cn.afterturn.easypoi.excel.entity.vo.PoiBaseConstants; import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; import cn.afterturn.easypoi.exception.excel.ExcelExportException; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; +import cn.afterturn.easypoi.handler.inter.IExcelExportServer; import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil; import cn.afterturn.easypoi.util.PoiMergeCellUtil; import cn.afterturn.easypoi.util.PoiPublicUtil; @@ -73,7 +74,7 @@ public abstract class BaseExportService extends ExportCommonService { for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); if (entity.getList() != null) { - Collection list = getListCellValue(entity, t); + Collection list = getListCellValue(entity, t); int listIndex = 0, tmpListHeight = 0; if (list != null && list.size() > 0) { int tempCellNum = 0; @@ -93,29 +94,25 @@ public abstract class BaseExportService extends ExportCommonService { createStringCell(row, cellNum++, value == null ? "" : value.toString(), index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); - if (entity.isHyperlink()) { - row.getCell(cellNum - 1) - .setHyperlink(dataHandler.getHyperlink( - row.getSheet().getWorkbook().getCreationHelper(), t, - entity.getName(), value)); - } + } else if (entity.getType() == BaseEntityTypeConstants.DOUBLE_TYPE) { createDoubleCell(row, cellNum++, value == null ? "" : value.toString(), index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); - if (entity.isHyperlink()) { - row.getCell(cellNum - 1).setHyperlink(dataHandler.getHyperlink( - row.getSheet().getWorkbook().getCreationHelper(), t, - entity.getName(), value)); - } } else { createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), t); } + if (entity.isHyperlink()) { + row.getCell(cellNum - 1) + .setHyperlink(dataHandler.getHyperlink( + row.getSheet().getWorkbook().getCreationHelper(), t, + entity.getName(), value)); + } } } maxHeight += listMaxHeight - 1; - if(indexKey == 1 && excelParams.get(1).isNeedMerge()) { + if (indexKey == 1 && excelParams.get(1).isNeedMerge()) { excelParams.get(0).setNeedMerge(true); } for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { @@ -210,8 +207,7 @@ public abstract class BaseExportService extends ExportCommonService { } private int createIndexCell(Row row, int index, ExcelExportEntity excelExportEntity) { - if (excelExportEntity.getName() != null && "序号".equals(excelExportEntity.getName()) && excelExportEntity.getFormat() != null - && excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { + if (excelExportEntity.getFormat() != null && excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { createStringCell(row, 0, currentIndex + "", index % 2 == 0 ? getStyles(false, null) : getStyles(true, null), null); currentIndex = currentIndex + 1; @@ -307,7 +303,7 @@ public abstract class BaseExportService extends ExportCommonService { cell.setCellValue(text); } } - + if (style != null) { cell.setCellStyle(style); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java index 7718b9e..f202ee0 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java @@ -105,6 +105,9 @@ public class ExportCommonService { } if (temp != null) { SimpleDateFormat format = new SimpleDateFormat(entity.getFormat()); + if(StringUtils.isNotEmpty(entity.getTimezone())){ + format.setTimeZone(TimeZone.getTimeZone(entity.getTimezone())); + } value = format.format(temp); } return value; @@ -262,6 +265,7 @@ public class ExportCommonService { excelEntity.setColumnHidden(excel.isColumnHidden()); excelEntity.setDict(excel.dict()); excelEntity.setEnumExportField(excel.enumExportField()); + excelEntity.setTimezone(excel.timezone()); if (excelGroup != null) { excelEntity.setGroupName(PoiPublicUtil.getValueByTargetId(excelGroup.name(), targetId, null)); } else { @@ -375,6 +379,7 @@ public class ExportCommonService { ExcelExportEntity exportEntity = new ExcelExportEntity(); //保证是第一排 exportEntity.setOrderNum(Integer.MIN_VALUE); + exportEntity.setNeedMerge(true); exportEntity.setName(entity.getIndexName()); exportEntity.setWidth(10); exportEntity.setFormat(PoiBaseConstants.IS_ADD_INDEX); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerBorderImpl.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerBorderImpl.java index 6708787..349ba19 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerBorderImpl.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerBorderImpl.java @@ -16,6 +16,7 @@ package cn.afterturn.easypoi.excel.export.styler; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.util.Removal; /** * 带有边框的Excel样式 @@ -23,6 +24,10 @@ import org.apache.poi.ss.usermodel.*; * @author JueYue * 2015年1月9日 下午5:55:29 */ +@Deprecated +@Removal( + version = "4.2" +) public class ExcelExportStylerBorderImpl extends AbstractExcelExportStyler implements IExcelExportStyler { diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerColorImpl.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerColorImpl.java index d8f50f1..5685628 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerColorImpl.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerColorImpl.java @@ -16,12 +16,17 @@ package cn.afterturn.easypoi.excel.export.styler; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.util.Removal; /** * 带有样式的导出服务 * @author JueYue * 2015年1月9日 下午4:54:15 */ +@Deprecated +@Removal( + version = "4.2" +) public class ExcelExportStylerColorImpl extends AbstractExcelExportStyler implements IExcelExportStyler { diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/IExcelExportStyler.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/IExcelExportStyler.java index d7e0582..6ab2e8f 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/IExcelExportStyler.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/IExcelExportStyler.java @@ -20,6 +20,7 @@ import org.apache.poi.ss.usermodel.CellStyle; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams; +import org.apache.poi.util.Removal; /** * Excel导出样式接口 @@ -42,6 +43,9 @@ public interface IExcelExportStyler { * 获取样式方法 */ @Deprecated + @Removal( + version = "4.2" + ) public CellStyle getStyles(boolean parity, ExcelExportEntity entity); /** diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java index 11b07b6..35ee86d 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java @@ -104,7 +104,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { sheet.getLastRowNum(), shiftRows, true, true); mergedRegionHelper.shiftRows(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), shiftRows); templateSumHandler.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), shiftRows); - PoiExcelTempUtil.reset(sheet,teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum()); + PoiExcelTempUtil.reset(sheet, teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum()); if (excelParams.size() == 0) { return; } @@ -157,7 +157,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan, lastRowNum, (datas.size() - 1) * rowspan, true, true); mergedRegionHelper.shiftRows(cell.getSheet(), cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan); templateSumHandler.shiftRows(cell.getRowIndex() + rowspan, (datas.size() - 1) * rowspan); - PoiExcelTempUtil.reset(cell.getSheet(),cell.getRowIndex() + rowspan+ (datas.size() - 1) * rowspan, cell.getRow().getSheet().getLastRowNum()); + PoiExcelTempUtil.reset(cell.getSheet(), cell.getRowIndex() + rowspan + (datas.size() - 1) * rowspan, cell.getRow().getSheet().getLastRowNum()); } while (its.hasNext()) { Object t = its.next(); @@ -193,7 +193,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { * @param excelParams * @throws Exception */ - public int getOneObjectSize(Object t, List excelParams) throws Exception { + private int getOneObjectSize(Object t, List excelParams) throws Exception { ExcelExportEntity entity; int maxHeight = 1; for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { @@ -221,7 +221,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { this.teplateParams = params; wb = ExcelCache.getWorkbook(teplateParams.getTemplateUrl(), teplateParams.getSheetNum(), true); - int oldSheetNum = wb.getNumberOfSheets(); + int oldSheetNum = wb.getNumberOfSheets(); List oldSheetName = new ArrayList<>(); for (int i = 0; i < oldSheetNum; i++) { oldSheetName.add(wb.getSheetName(i)); @@ -311,9 +311,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { } else { wb = getCloneWorkBook(); } - if (wb instanceof XSSFWorkbook) { - super.type = ExcelType.XSSF; - } // 创建表格样式 setExcelExportStyler((IExcelExportStyler) teplateParams.getStyle() .getConstructor(Workbook.class).newInstance(wb)); @@ -382,6 +379,9 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { private void parseTemplate(Sheet sheet, Map map, boolean colForeach) throws Exception { + if (sheet.getWorkbook() instanceof XSSFWorkbook) { + super.type = ExcelType.XSSF; + } deleteCell(sheet, map); mergedRegionHelper = new MergedRegionHelper(sheet); templateSumHandler = new TemplateSumHandler(sheet); @@ -410,8 +410,12 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { private void handlerSumCell(Sheet sheet) { for (TemplateSumEntity sumEntity : templateSumHandler.getDataList()) { Cell cell = sheet.getRow(sumEntity.getRow()).getCell(sumEntity.getCol()); - cell.setCellValue(cell.getStringCellValue() - .replace("sum:(" + sumEntity.getSumKey() + ")", sumEntity.getValue() + "")); + if (cell.getStringCellValue().contains(sumEntity.getSumKey())) { + cell.setCellValue(cell.getStringCellValue() + .replace("sum:(" + sumEntity.getSumKey() + ")", sumEntity.getValue() + "")); + } else { + cell.setCellValue(cell.getStringCellValue() + sumEntity.getValue()); + } } } @@ -529,7 +533,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { return; } String oldString; - cell.setCellType(CellType.STRING); oldString = cell.getStringCellValue(); if (oldString != null && oldString.indexOf(START_STR) != -1 && !oldString.contains(FOREACH)) { @@ -540,6 +543,11 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { isNumber = true; oldString = oldString.replaceFirst(NUMBER_SYMBOL, ""); } + boolean isStyleBySelf = false; + if (isStyleBySelf(oldString)) { + isStyleBySelf = true; + oldString = oldString.replaceFirst(NUMBER_SYMBOL, ""); + } Object obj = PoiPublicUtil.getRealValue(oldString, map); //如何是数值 类型,就按照数值类型进行设置// 如果是图片就设置为图片 if (obj instanceof ImageEntity) { @@ -553,7 +561,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { createImageCell(cell, img.getHeight(), img.getRowspan(), img.getColspan(), img.getUrl(), img.getData()); } else if (isNumber && StringUtils.isNotBlank(obj.toString())) { cell.setCellValue(Double.parseDouble(obj.toString())); - cell.setCellType(CellType.NUMERIC); } else { cell.setCellValue(obj.toString()); } @@ -570,6 +577,11 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { || text.contains(" " + NUMBER_SYMBOL); } + private boolean isStyleBySelf(String text) { + return text.startsWith(STYLE_SELF) || text.contains("{" + STYLE_SELF) + || text.contains(" " + STYLE_SELF); + } + /** * 创建并返回第一个Row * @@ -620,8 +632,7 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { ExcelForEachParams params; row = row.getSheet().getRow(row.getRowNum() - rowspan + 1); for (int k = 0; k < rowspan; k++) { - int ci = columnIndex;//cell的序号 - + int ci = columnIndex; short high = columns.get(0).getHeight(); int n = k; while (n > 0) { @@ -672,7 +683,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { createImageCell(row.getCell(ci), img.getHeight(), img.getRowspan(), img.getColspan(), img.getUrl(), img.getData()); } else if (isNumber && StringUtils.isNotEmpty(val)) { row.getCell(ci).setCellValue(Double.parseDouble(val)); - row.getCell(ci).setCellType(CellType.NUMERIC); } else { try { row.getCell(ci).setCellValue(val); @@ -680,7 +690,9 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { LOGGER.error(e.getMessage(), e); } } - row.getCell(ci).setCellStyle(params.getCellStyle()); // plq modify at 2017-11-13 + if(params.getCellStyle() != null){ + row.getCell(ci).setCellStyle(params.getCellStyle()); + } //判断这个属性是不是需要统计 if (params.isNeedSum()) { templateSumHandler.addValueOfKey(params.getName(), val); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java index a34a288..6f3c447 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java @@ -13,7 +13,6 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sun.misc.BASE64Encoder; import java.text.SimpleDateFormat; import java.util.*; @@ -275,8 +274,8 @@ public class ExcelToHtmlService { byte[] data = pictureData.getData(); //直接输出到HTML使用BASE64Encoder // 加密 - BASE64Encoder encoder = new BASE64Encoder(); - return encoder.encode(data); + Base64.Encoder encoder = Base64.getEncoder(); + return encoder.encodeToString(data); /*String fileName = "pic" + Math.round(Math.random() * 100000000000L); fileName += "." + PoiPublicUtil.getFileExtendName(data); if (!imageCachePath.startsWith("/") && !imageCachePath.contains(":")) { diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java index 93661ba..dc3617b 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java @@ -173,8 +173,12 @@ public class CellValueService { try { return format.parse(value); } catch (ParseException e) { - LOGGER.error("时间格式化失败,格式化:{},值:{}", entity.getFormat(), value); - throw new ExcelImportException(ExcelImportEnum.GET_VALUE_ERROR); + try { + return DateUtil.getJavaDate(Double.parseDouble(value)); + } catch (NumberFormatException ex) { + LOGGER.error("时间格式化失败,格式化:{},值:{}", entity.getFormat(), value); + throw new ExcelImportException(ExcelImportEnum.GET_VALUE_ERROR); + } } } return null; diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java index b087b20..12d72b0 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java @@ -82,7 +82,7 @@ public class SheetHandler extends DefaultHandler { return; } if (INLINE_STR.equals(cellType)) { - type = CellValueType.String; + type = CellValueType.InlineStr; return; } if (FORMULA.equals(cellType)) { @@ -126,7 +126,6 @@ public class SheetHandler extends DefaultHandler { int idx = Integer.parseInt(lastContents); lastContents = sharedStringsTable.getItemAt(idx).getString(); } catch (Exception e) { - } } //t元素也包含字符串 @@ -146,7 +145,7 @@ public class SheetHandler extends DefaultHandler { } else if (CellValueType.Number.equals(type)) { BigDecimal bd = new BigDecimal(value); rowList.add(curCol, new SaxReadCellEntity(CellValueType.Number, bd)); - } else if (CellValueType.String.equals(type)) { + } else if (CellValueType.String.equals(type) || CellValueType.InlineStr.equals(type)) { rowList.add(curCol, new SaxReadCellEntity(CellValueType.String, value)); } curCol++; diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelExportServer.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelExportServer.java index acfd5b4..a814732 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelExportServer.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelExportServer.java @@ -4,16 +4,18 @@ import java.util.List; /** * 导出数据接口 + * * @author JueYue * 2016年9月8日 */ public interface IExcelExportServer { /** * 查询数据接口 - * @param obj 查询条件 - * @param page 当前页数 + * + * @param queryParams 查询条件 + * @param page 当前页数从1开始 * @return */ - public List selectListForExcelExport(Object obj, int page); + public List selectListForExcelExport(Object queryParams, int page); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiElUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiElUtil.java index 2e86e30..3ed2a76 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiElUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiElUtil.java @@ -40,6 +40,7 @@ public final class PoiElUtil { public static final String END_STR = "}}"; public static final String WRAP = "]]"; public static final String NUMBER_SYMBOL = "n:"; + public static final String STYLE_SELF = "sy:"; public static final String FORMAT_DATE = "fd:"; public static final String FORMAT_NUMBER = "fn:"; public static final String SUM = "sum:"; diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java index f93c699..7f52fa4 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java @@ -215,7 +215,7 @@ public final class PoiMergeCellUtil { try { sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol)); } catch (Exception e) { - LOGGER.error("发生了一次合并单元格错误,{},{},{},{}", new Integer[]{ + LOGGER.debug("发生了一次合并单元格错误,{},{},{},{}", new Integer[]{ firstRow, lastRow, firstCol, lastCol }); // 忽略掉合并的错误,不打印异常 diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java index b142fb6..1338099 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java @@ -46,32 +46,6 @@ public class ParseWord07 { private static final Logger LOGGER = LoggerFactory.getLogger(ParseWord07.class); - /** - * 添加图片 - * - * @param obj - * @param currentRun - * @throws Exception - * @author JueYue - * 2013-11-20 - */ - private void addAnImage(ImageEntity obj, XWPFRun currentRun) throws Exception { - Object[] isAndType = PoiPublicUtil.getIsAndType(obj); - String picId; - try { - picId = currentRun.getDocument().addPictureData((byte[]) isAndType[0], - (Integer) isAndType[1]); - ((MyXWPFDocument) currentRun.getDocument()).createPicture(currentRun, - picId, currentRun.getDocument() - .getNextPicNameNumber((Integer) isAndType[1]), - obj.getWidth(), obj.getHeight()); - - } catch (Exception e) { - LOGGER.error(e.getMessage(), e); - } - - } - /** * 根据条件改变值 * @@ -84,7 +58,7 @@ public class ParseWord07 { Object obj = PoiPublicUtil.getRealValue(currentText, map); if (obj instanceof ImageEntity) {// 如果是图片就设置为图片 currentRun.setText("", 0); - addAnImage((ImageEntity) obj, currentRun); + ExcelMapParse.addAnImage((ImageEntity) obj, currentRun); } else { currentText = obj.toString(); PoiPublicUtil.setWordText(currentRun, currentText); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java index 344d795..bc80722 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java @@ -1,12 +1,12 @@ /** * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + *

* http://www.apache.org/licenses/LICENSE-2.0 - * + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,24 +15,7 @@ */ package cn.afterturn.easypoi.word.parse.excel; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; -import org.apache.poi.xwpf.usermodel.XWPFParagraph; -import org.apache.poi.xwpf.usermodel.XWPFRun; -import org.apache.poi.xwpf.usermodel.XWPFTable; -import org.apache.poi.xwpf.usermodel.XWPFTableCell; -import org.apache.poi.xwpf.usermodel.XWPFTableRow; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +import cn.afterturn.easypoi.entity.ImageEntity; import cn.afterturn.easypoi.excel.annotation.ExcelTarget; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.export.base.ExportCommonService; @@ -42,12 +25,20 @@ import cn.afterturn.easypoi.exception.word.WordExportException; import cn.afterturn.easypoi.exception.word.enmus.WordExportEnum; import cn.afterturn.easypoi.util.PoiPublicUtil; import cn.afterturn.easypoi.word.entity.params.ExcelListEntity; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.poi.xwpf.usermodel.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Field; +import java.util.*; /** * 解析实体类对象 复用注解 * * @author JueYue - * 2014年8月9日 下午10:30:57 + * 2014年8月9日 下午10:30:57 */ public class ExcelEntityParse extends ExportCommonService { @@ -64,7 +55,7 @@ public class ExcelEntityParse extends ExportCommonService { XWPFTable table, short rowHeight) { try { ExcelExportEntity entity; - XWPFTableRow row = table.insertNewTableRow(index); + XWPFTableRow row = table.insertNewTableRow(index); if (rowHeight != -1) { row.setHeight(rowHeight); } @@ -72,8 +63,8 @@ public class ExcelEntityParse extends ExportCommonService { for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); if (entity.getList() != null) { - Collection list = (Collection) entity.getMethod().invoke(t, new Object[]{}); - int listC = 0; + Collection list = (Collection) entity.getMethod().invoke(t, new Object[]{}); + int listC = 0; for (Object obj : list) { createListCells(index + listC, cellNum, obj, entity.getList(), table, rowHeight); listC++; @@ -109,17 +100,18 @@ public class ExcelEntityParse extends ExportCommonService { /** * 创建List之后的各个Cells + * * @param index * @param cellNum - * @param obj 当前对象 - * @param excelParams 列参数信息 - * @param table 当前表格 - * @param rowHeight 行高 + * @param obj 当前对象 + * @param excelParams 列参数信息 + * @param table 当前表格 + * @param rowHeight 行高 * @throws Exception */ public void createListCells(int index, int cellNum, Object obj, List excelParams, XWPFTable table, short rowHeight) throws Exception { ExcelExportEntity entity; - XWPFTableRow row; + XWPFTableRow row; if (table.getRow(index) == null) { row = table.createRow(); row.setHeight(rowHeight); @@ -147,7 +139,7 @@ public class ExcelEntityParse extends ExportCommonService { throw new WordExportException(WordExportEnum.EXCEL_NO_HEAD); } Map map = new HashMap(); - String text; + String text; for (int j = 0; j < headRows; j++) { List cells = table.getRow(index - j - 1).getTableCells(); for (int i = 0; i < cells.size(); i++) { @@ -175,9 +167,9 @@ public class ExcelEntityParse extends ExportCommonService { Map titlemap = getTitleMap(table, index, entity.getHeadRows()); try { // 得到所有字段 - Field[] fileds = PoiPublicUtil.getClassFields(entity.getClazz()); - ExcelTarget etarget = entity.getClazz().getAnnotation(ExcelTarget.class); - String targetId = null; + Field[] fileds = PoiPublicUtil.getClassFields(entity.getClazz()); + ExcelTarget etarget = entity.getClazz().getAnnotation(ExcelTarget.class); + String targetId = null; if (etarget != null) { targetId = etarget.value(); } @@ -186,8 +178,8 @@ public class ExcelEntityParse extends ExportCommonService { getAllExcelField(null, targetId, fileds, excelParams, entity.getClazz(), null, null); // 根据表头进行筛选排序 sortAndFilterExportField(excelParams, titlemap); - short rowHeight = getRowHeight(excelParams); - Iterator its = entity.getList().iterator(); + short rowHeight = getRowHeight(excelParams); + Iterator its = entity.getList().iterator(); while (its.hasNext()) { Object t = its.next(); index += createCells(index, t, excelParams, table, rowHeight); @@ -200,34 +192,38 @@ public class ExcelEntityParse extends ExportCommonService { private void setCellValue(XWPFTableRow row, Object value, int cellNum) { if (row.getCell(cellNum++) != null) { row.getCell(cellNum - 1).setText(value == null ? "" : value.toString()); - setWordText(row, value); - } else { - setWordText(row, value); } + setWordText(row, value); } + /** * 解决word导出表格多出的换行符问题 + * * @param row * @param value */ private void setWordText(XWPFTableRow row, Object value) { - XWPFTableCell cell = row.createCell(); + XWPFTableCell cell = row.createCell(); List paragraphs = cell.getParagraphs(); - XWPFParagraph paragraph = null; - XWPFRun run = null; - if(paragraphs != null && paragraphs.size() > 0) { + XWPFParagraph paragraph = null; + XWPFRun run = null; + if (paragraphs != null && paragraphs.size() > 0) { paragraph = paragraphs.get(0); } else { paragraph = row.createCell().addParagraph(); } List runs = paragraph.getRuns(); - if(runs != null && runs.size() > 0) { + if (runs != null && runs.size() > 0) { run = runs.get(0); } else { run = paragraph.createRun(); } - PoiPublicUtil.setWordText(run, value == null ? "" : value.toString()); + if (value instanceof ImageEntity){ + ExcelMapParse.addAnImage((ImageEntity) value, run); + }else{ + PoiPublicUtil.setWordText(run, value == null ? "" : value.toString()); + } } /** diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelMapParse.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelMapParse.java index e8d171f..7e6c80b 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelMapParse.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelMapParse.java @@ -13,8 +13,12 @@ */ package cn.afterturn.easypoi.word.parse.excel; +import cn.afterturn.easypoi.entity.ImageEntity; +import cn.afterturn.easypoi.util.PoiPublicUtil; +import cn.afterturn.easypoi.word.entity.MyXWPFDocument; import com.google.common.collect.Maps; +import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; @@ -44,6 +48,32 @@ public final class ExcelMapParse { private static final Logger LOGGER = LoggerFactory.getLogger(ExcelMapParse.class); + /** + * 添加图片 + * + * @param obj + * @param currentRun + * @throws Exception + * @author JueYue + * 2013-11-20 + */ + public static void addAnImage(ImageEntity obj, XWPFRun currentRun) { + try { + Object[] isAndType = PoiPublicUtil.getIsAndType(obj); + String picId; + picId = currentRun.getDocument().addPictureData((byte[]) isAndType[0], + (Integer) isAndType[1]); + ((MyXWPFDocument) currentRun.getDocument()).createPicture(currentRun, + picId, currentRun.getDocument() + .getNextPicNameNumber((Integer) isAndType[1]), + obj.getWidth(), obj.getHeight()); + + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + + } + /** * 解析参数行,获取参数列表 * @@ -83,8 +113,7 @@ public final class ExcelMapParse { //保存这一行的样式是-后面好统一设置 List tempCellList = new ArrayList(); tempCellList.addAll(table.getRow(index).getTableCells()); - int templateInde = index; - int cellIndex = 0;// 创建完成对象一行好像多了一个cell + int cellIndex = 0; Map tempMap = Maps.newHashMap(); LOGGER.debug("start for each data list :{}", list.size()); for (Object obj : list) { @@ -103,7 +132,7 @@ public final class ExcelMapParse { currentRow.createCell(), val); } } - table.removeRow(index);// 移除这一行 + table.removeRow(index); } diff --git a/easypoi-web/src/main/java/cn/afterturn/easypoi/entity/vo/BigExcelConstants.java b/easypoi-web/src/main/java/cn/afterturn/easypoi/entity/vo/BigExcelConstants.java index 34bc962..2e1ab63 100644 --- a/easypoi-web/src/main/java/cn/afterturn/easypoi/entity/vo/BigExcelConstants.java +++ b/easypoi-web/src/main/java/cn/afterturn/easypoi/entity/vo/BigExcelConstants.java @@ -32,6 +32,6 @@ public interface BigExcelConstants extends BasePOIConstants { /** * 查询函数 */ - public final static String DATA_INTER = "dataInterf"; + public final static String DATA_INTER = "dataInter"; } diff --git a/easypoi-web/src/main/java/cn/afterturn/easypoi/view/EasypoiBigExcelExportView.java b/easypoi-web/src/main/java/cn/afterturn/easypoi/view/EasypoiBigExcelExportView.java index 5505ba0..a29cc8c 100644 --- a/easypoi-web/src/main/java/cn/afterturn/easypoi/view/EasypoiBigExcelExportView.java +++ b/easypoi-web/src/main/java/cn/afterturn/easypoi/view/EasypoiBigExcelExportView.java @@ -24,8 +24,6 @@ import org.springframework.stereotype.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.Collections; -import java.util.List; import java.util.Map; /** @@ -44,19 +42,9 @@ public class EasypoiBigExcelExportView extends MiniAbstractExcelView { String codedFileName = "临时文件"; Workbook workbook = ExcelExportUtil.exportBigExcel( (ExportParams) model.get(BigExcelConstants.PARAMS), - (Class) model.get(BigExcelConstants.CLASS), Collections.EMPTY_LIST); - IExcelExportServer server = (IExcelExportServer) model.get(BigExcelConstants.DATA_INTER); - int page = 1; - List list = server - .selectListForExcelExport(model.get(BigExcelConstants.DATA_PARAMS), page++); - while (list != null && list.size() > 0) { - workbook = ExcelExportUtil.exportBigExcel( - (ExportParams) model.get(BigExcelConstants.PARAMS), - (Class) model.get(BigExcelConstants.CLASS), list); - list = server.selectListForExcelExport(model.get(BigExcelConstants.DATA_PARAMS), - page++); - } - ExcelExportUtil.closeExportBigExcel(); + (Class) model.get(BigExcelConstants.CLASS), + (IExcelExportServer) model.get(BigExcelConstants.DATA_INTER), + model.get(BigExcelConstants.DATA_PARAMS)); if (model.containsKey(BigExcelConstants.FILE_NAME)) { codedFileName = (String) model.get(BigExcelConstants.FILE_NAME); }