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);
}