瀏覽代碼

Merge branch 'master' of https://gitee.com/lemur/easypoi

4.1.3.A
Hugh Gao 6 年之前
父節點
當前提交
e1a31b429f
共有 23 個檔案被更改,包括 281 行新增285 行删除
  1. +4
    -2
      easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java
  2. +69
    -93
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java
  3. +9
    -9
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/enmus/CellValueType.java
  4. +10
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java
  5. +2
    -1
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/vo/BaseEntityTypeConstants.java
  6. +34
    -46
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java
  7. +12
    -16
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java
  8. +5
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java
  9. +5
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerBorderImpl.java
  10. +5
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/ExcelExportStylerColorImpl.java
  11. +4
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/styler/IExcelExportStyler.java
  12. +27
    -15
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java
  13. +2
    -3
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java
  14. +6
    -2
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java
  15. +2
    -3
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java
  16. +5
    -3
      easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelExportServer.java
  17. +1
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiElUtil.java
  18. +1
    -1
      easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiMergeCellUtil.java
  19. +1
    -27
      easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java
  20. +41
    -45
      easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java
  21. +32
    -3
      easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelMapParse.java
  22. +1
    -1
      easypoi-web/src/main/java/cn/afterturn/easypoi/entity/vo/BigExcelConstants.java
  23. +3
    -15
      easypoi-web/src/main/java/cn/afterturn/easypoi/view/EasypoiBigExcelExportView.java

+ 4
- 2
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
*/


+ 69
- 93
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
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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<ExcelExportEntity> 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<ExcelExportEntity> 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<Map<String, Object>> list, ExcelType type) {
Workbook workbook = getWorkbook(type,0);
Workbook workbook = getWorkbook(type, 0);
for (Map<String, Object> 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<String, Object> 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<String, Object> 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<Integer, Map<String, Object>> 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<Integer, List<Map<String, Object>>> map,
TemplateExportParams params) {
TemplateExportParams params) {
return new ExcelExportOfTemplateUtil().createExcelCloneByTemplate(params, map);
}


+ 9
- 9
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
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
}

+ 10
- 0
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<Method> methods;
@@ -162,5 +166,11 @@ public class ExcelBaseEntity {
this.fixedIndex = fixedIndex;
}
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
}

+ 2
- 1
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;
}

+ 34
- 46
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<ExcelBatchExportService> THREAD_LOCAL = new ThreadLocal<ExcelBatchExportService>();
private Workbook workbook;
private Sheet sheet;
private List<ExcelExportEntity> excelParams;
private ExportParams entity;
private int titleHeight;
private Drawing patriarch;
private short rowHeight;
private int index;
private Workbook workbook;
private Sheet sheet;
private List<ExcelExportEntity> excelParams;
private ExportParams entity;
private int titleHeight;
private Drawing patriarch;
private short rowHeight;
private int index;
public void init(ExportParams entity, Class<?> pojoClass) {
List<ExcelExportEntity> 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<ExcelExportEntity> 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<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
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<ExcelExportEntity> 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<Object> list = server
.selectListForExcelExport(queryParams, page++);
while (list != null && list.size() > 0) {
appendData(list);
list = server.selectListForExcelExport(queryParams, page++);
}
return closeExportBigExcel();
}
}

+ 12
- 16
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);
}


+ 5
- 0
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);


+ 5
- 0
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 {


+ 5
- 0
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 {


+ 4
- 0
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);
/**


+ 27
- 15
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<ExcelExportEntity> excelParams) throws Exception {
private int getOneObjectSize(Object t, List<ExcelExportEntity> 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<String> 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<String, Object> 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);


+ 2
- 3
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(":")) {


+ 6
- 2
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;


+ 2
- 3
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++;


+ 5
- 3
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<Object> selectListForExcelExport(Object obj, int page);
public List<Object> selectListForExcelExport(Object queryParams, int page);
}

+ 1
- 0
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:";


+ 1
- 1
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
});
// 忽略掉合并的错误,不打印异常


+ 1
- 27
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);


+ 41
- 45
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)
*
* <p>
* 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
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* 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<ExcelExportEntity> 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<String, Integer> map = new HashMap<String, Integer>();
String text;
String text;
for (int j = 0; j < headRows; j++) {
List<XWPFTableCell> 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<String, Integer> 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<XWPFParagraph> 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<XWPFRun> 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());
}
}
/**


+ 32
- 3
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<XWPFTableCell> tempCellList = new ArrayList<XWPFTableCell>();
tempCellList.addAll(table.getRow(index).getTableCells());
int templateInde = index;
int cellIndex = 0;// 创建完成对象一行好像多了一个cell
int cellIndex = 0;
Map<String, Object> 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);
}


+ 1
- 1
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";
}

+ 3
- 15
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<Object> 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);
}


Loading…
取消
儲存