Przeglądaj źródła

Word的模板导出已经基本完成

4.1.3.A
jueyue 10 lat temu
rodzic
commit
9b7e3bad7a
28 zmienionych plików z 1218 dodań i 422 usunięć
  1. +1
    -0
      easypoi-base/.settings/org.eclipse.core.resources.prefs
  2. +1
    -1
      easypoi-base/pom.xml
  3. +1
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
  4. +2
    -288
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java
  5. +314
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java
  6. +1
    -1
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java
  7. +27
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/exception/word/WordExportException.java
  8. +29
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/exception/word/enmus/WordExportEnum.java
  9. +1
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java
  10. +3
    -2
      easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java
  11. +17
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelVerifyHandler.java
  12. +24
    -5
      easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/WordImageEntity.java
  13. +69
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/params/ExcelListEntity.java
  14. +78
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/params/ListParamEntity.java
  15. +104
    -120
      easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java
  16. +208
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java
  17. +71
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java
  18. +3
    -1
      easypoi-base/src/main/java/org/jeecgframework/poi/word/util/ParseWordUtil.java
  19. +6
    -0
      easypoi-test/.classpath
  20. +1
    -1
      easypoi-test/pom.xml
  21. +13
    -0
      easypoi-test/src/main/java/org/jeecgframework/poi/UtilTest.java
  22. +119
    -0
      easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilAnnExcelTest.java
  23. +79
    -0
      easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilBaseExcelTest.java
  24. BIN
      easypoi-test/src/main/java/org/jeecgframework/poi/word/doc/Excel.docx
  25. BIN
      easypoi-test/src/main/java/org/jeecgframework/poi/word/doc/SimpleExcel.docx
  26. +43
    -0
      easypoi-test/src/main/java/org/jeecgframework/poi/word/entity/Person.java
  27. +1
    -1
      easypoi-web/pom.xml
  28. +2
    -2
      pom.xml

+ 1
- 0
easypoi-base/.settings/org.eclipse.core.resources.prefs Wyświetl plik

@@ -1,2 +1,3 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/test/java=UTF-8

+ 1
- 1
easypoi-base/pom.xml Wyświetl plik

@@ -4,7 +4,7 @@
<parent>
<groupId>org.jeecgframework</groupId>
<artifactId>easypoi</artifactId>
<version>2.0.1</version>
<version>2.0.2</version>
</parent>
<artifactId>easypoi-base</artifactId>
<dependencies>


+ 1
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java Wyświetl plik

@@ -22,6 +22,7 @@ import org.apache.poi.ss.util.CellRangeAddress;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.export.base.ExcelExportBase;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
import org.jeecgframework.poi.util.POIPublicUtil;


easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportBase.java → easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java Wyświetl plik

@@ -1,15 +1,12 @@
package org.jeecgframework.poi.excel.export;
package org.jeecgframework.poi.excel.export.base;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -33,10 +30,6 @@ import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.jeecgframework.poi.excel.annotation.ExcelEntity;
import org.jeecgframework.poi.excel.entity.params.ComparatorExcelField;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.entity.params.MergeEntity;
import org.jeecgframework.poi.handler.inter.IExcelDataHandler;
@@ -48,184 +41,7 @@ import org.jeecgframework.poi.util.POIPublicUtil;
* @author JueYue
* @date 2014年6月17日 下午6:15:13
*/
public abstract class ExcelExportBase {
protected IExcelDataHandler dataHanlder;
protected List<String> needHanlderList;
/**
* 获取需要导出的全部字段
*
* @param exclusions
* @param targetId
* 目标ID
* @param fields
* @throws Exception
*/
public void getAllExcelField(String[] exclusions, String targetId,
Field[] fields, List<ExcelExportEntity> excelParams,
Class<?> pojoClass, List<Method> getMethods) throws Exception {
List<String> exclusionsList = exclusions != null ? Arrays
.asList(exclusions) : null;
ExcelExportEntity excelEntity;
// 遍历整个filed
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
// 先判断是不是collection,在判断是不是java自带对象,之后就是我们自己的对象了
if (POIPublicUtil.isNotUserExcelUserThis(exclusionsList, field,
targetId)) {
continue;
}
if (POIPublicUtil.isCollection(field.getType())) {
ExcelCollection excel = field
.getAnnotation(ExcelCollection.class);
ParameterizedType pt = (ParameterizedType) field
.getGenericType();
Class<?> clz = (Class<?>) pt.getActualTypeArguments()[0];
List<ExcelExportEntity> list = new ArrayList<ExcelExportEntity>();
getAllExcelField(exclusions,
StringUtils.isNotEmpty(excel.id()) ? excel.id()
: targetId,
POIPublicUtil.getClassFields(clz), list, clz, null);
excelEntity = new ExcelExportEntity();
excelEntity.setName(getExcelName(excel.name(), targetId));
excelEntity
.setOrderNum(getCellOrder(excel.orderNum(), targetId));
excelEntity.setMethod(POIPublicUtil.getMethod(
field.getName(), pojoClass));
excelEntity.setList(list);
excelParams.add(excelEntity);
} else if (POIPublicUtil.isJavaClass(field)) {
excelParams.add(createExcelExportEntity(field, targetId,
pojoClass, getMethods));
} else {
List<Method> newMethods = new ArrayList<Method>();
if (getMethods != null) {
newMethods.addAll(getMethods);
}
newMethods.add(POIPublicUtil.getMethod(field.getName(),
pojoClass));
ExcelEntity excel = field.getAnnotation(ExcelEntity.class);
getAllExcelField(exclusions,
StringUtils.isNotEmpty(excel.id()) ? excel.id()
: targetId,
POIPublicUtil.getClassFields(field.getType()),
excelParams, field.getType(), newMethods);
}
}
}
/**
* 创建导出实体对象
*
* @param field
* @param targetId
* @param pojoClass
* @param getMethods
* @return
* @throws Exception
*/
private ExcelExportEntity createExcelExportEntity(Field field,
String targetId, Class<?> pojoClass, List<Method> getMethods)
throws Exception {
Excel excel = field.getAnnotation(Excel.class);
ExcelExportEntity excelEntity = new ExcelExportEntity();
excelEntity.setType(excel.type());
getExcelField(targetId, field, excelEntity, excel, pojoClass);
if (getMethods != null) {
List<Method> newMethods = new ArrayList<Method>();
newMethods.addAll(getMethods);
newMethods.add(excelEntity.getMethod());
excelEntity.setMethods(newMethods);
}
return excelEntity;
}
/**
* 判断在这个单元格显示的名称
*
* @param exportName
* @param targetId
* @return
*/
public String getExcelName(String exportName, String targetId) {
if (exportName.indexOf(",") < 0) {
return exportName;
}
String[] arr = exportName.split(",");
for (String str : arr) {
if (str.indexOf(targetId) != -1) {
return str.split("_")[0];
}
}
return null;
}
/**
* 获取这个字段的顺序
*
* @param orderNum
* @param targetId
* @return
*/
public int getCellOrder(String orderNum, String targetId) {
if (isInteger(orderNum) || targetId == null) {
return Integer.valueOf(orderNum);
}
String[] arr = orderNum.split(",");
String[] temp;
for (String str : arr) {
temp = str.split("_");
if (targetId.equals(temp[1])) {
return Integer.valueOf(temp[0]);
}
}
return 0;
}
/**
* 判断字符串是否是整数
*/
public boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
/**
* 注解到导出对象的转换
*
* @param targetId
* @param field
* @param excelEntity
* @param excel
* @param pojoClass
* @throws Exception
*/
private void getExcelField(String targetId, Field field,
ExcelExportEntity excelEntity, Excel excel, Class<?> pojoClass)
throws Exception {
excelEntity.setName(getExcelName(excel.name(), targetId));
excelEntity.setWidth(excel.width());
excelEntity.setHeight(excel.height());
excelEntity.setNeedMerge(excel.needMerge());
excelEntity.setMergeVertical(excel.mergeVertical());
excelEntity.setMergeRely(excel.mergeRely());
excelEntity.setReplace(excel.replace());
excelEntity.setOrderNum(getCellOrder(excel.orderNum(), targetId));
excelEntity.setWrap(excel.isWrap());
excelEntity.setExportImageType(excel.imageType());
excelEntity.setDatabaseFormat(excel.databaseFormat());
excelEntity
.setFormat(StringUtils.isNotEmpty(excel.exportFormat()) ? excel
.exportFormat() : excel.format());
String fieldname = field.getName();
excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass));
}
public abstract class ExcelExportBase extends ExportBase {
/**
* 合并单元格
@@ -454,60 +270,6 @@ public abstract class ExcelExportBase {
return null;
}
/**
* 获取填如这个cell的值,提供一些附加功能
*
* @param entity
* @param obj
* @return
* @throws Exception
*/
public Object getCellValue(ExcelExportEntity entity, Object obj)
throws Exception {
Object value = entity.getMethods() != null ? getFieldBySomeMethod(
entity.getMethods(), obj) : entity.getMethod().invoke(obj,
new Object[] {});
if (needHanlderList != null
&& needHanlderList.contains(entity.getName())) {
value = dataHanlder.exportHandler(obj, entity.getName(), value);
} else if (StringUtils.isNotEmpty(entity.getFormat())) {
value = formatValue(value, entity);
} else if (entity.getReplace() != null
&& entity.getReplace().length > 0) {
value = replaceValue(entity.getReplace(), String.valueOf(value));
}
return value == null ? "" : value.toString();
}
private Object replaceValue(String[] replace, String value) {
String[] temp;
for (String str : replace) {
temp = str.split("_");
if (value.equals(temp[1])) {
value = temp[0];
break;
}
}
return value;
}
private Object formatValue(Object value, ExcelExportEntity entity)
throws Exception {
Date temp = null;
if (value instanceof String) {
SimpleDateFormat format = new SimpleDateFormat(
entity.getDatabaseFormat());
temp = format.parse(value.toString());
} else if (value instanceof Date) {
temp = (Date) value;
}
if (temp != null) {
SimpleDateFormat format = new SimpleDateFormat(entity.getFormat());
value = format.format(temp);
}
return value;
}
/**
* 创建List之后的各个Cells
*
@@ -543,54 +305,6 @@ public abstract class ExcelExportBase {
}
}
public short getRowHeight(List<ExcelExportEntity> excelParams) {
int maxHeight = 0;
for (int i = 0; i < excelParams.size(); i++) {
maxHeight = maxHeight > excelParams.get(i).getHeight() ? maxHeight
: excelParams.get(i).getHeight();
if (excelParams.get(i).getList() != null) {
for (int j = 0; j < excelParams.get(i).getList().size(); j++) {
maxHeight = maxHeight > excelParams.get(i).getList().get(j)
.getHeight() ? maxHeight : excelParams.get(i)
.getList().get(j).getHeight();
}
}
}
return (short) (maxHeight * 50);
}
/**
* 对字段根据用户设置排序
*/
public void sortAllParams(List<ExcelExportEntity> excelParams) {
Collections.sort(excelParams, new ComparatorExcelField());
for (ExcelExportEntity entity : excelParams) {
if (entity.getList() != null) {
Collections.sort(entity.getList(), new ComparatorExcelField());
}
}
}
/**
* 多个反射获取值
*
* @param list
* @param t
* @return
* @throws Exception
*/
public Object getFieldBySomeMethod(List<Method> list, Object t)
throws Exception {
for (Method m : list) {
if (t == null) {
t = "";
break;
}
t = m.invoke(t, new Object[] {});
}
return t;
}
public void setCellWith(List<ExcelExportEntity> excelParams, Sheet sheet) {
int index = 0;
for (int i = 0; i < excelParams.size(); i++) {

+ 314
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java Wyświetl plik

@@ -0,0 +1,314 @@
package org.jeecgframework.poi.excel.export.base;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.jeecgframework.poi.excel.annotation.ExcelEntity;
import org.jeecgframework.poi.excel.entity.params.ComparatorExcelField;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.handler.inter.IExcelDataHandler;
import org.jeecgframework.poi.util.POIPublicUtil;
/**
* 导出基础处理,不设计POI,只设计对象,保证复用性
*
* @author JueYue
* @date 2014年8月9日 下午11:01:32
*/
public class ExportBase {
protected IExcelDataHandler dataHanlder;
protected List<String> needHanlderList;
/**
* 获取需要导出的全部字段
*
* @param exclusions
* @param targetId
* 目标ID
* @param fields
* @throws Exception
*/
public void getAllExcelField(String[] exclusions, String targetId,
Field[] fields, List<ExcelExportEntity> excelParams,
Class<?> pojoClass, List<Method> getMethods) throws Exception {
List<String> exclusionsList = exclusions != null ? Arrays
.asList(exclusions) : null;
ExcelExportEntity excelEntity;
// 遍历整个filed
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
// 先判断是不是collection,在判断是不是java自带对象,之后就是我们自己的对象了
if (POIPublicUtil.isNotUserExcelUserThis(exclusionsList, field,
targetId)) {
continue;
}
if (POIPublicUtil.isCollection(field.getType())) {
ExcelCollection excel = field
.getAnnotation(ExcelCollection.class);
ParameterizedType pt = (ParameterizedType) field
.getGenericType();
Class<?> clz = (Class<?>) pt.getActualTypeArguments()[0];
List<ExcelExportEntity> list = new ArrayList<ExcelExportEntity>();
getAllExcelField(exclusions,
StringUtils.isNotEmpty(excel.id()) ? excel.id()
: targetId, POIPublicUtil.getClassFields(clz),
list, clz, null);
excelEntity = new ExcelExportEntity();
excelEntity.setName(getExcelName(excel.name(), targetId));
excelEntity
.setOrderNum(getCellOrder(excel.orderNum(), targetId));
excelEntity.setMethod(POIPublicUtil.getMethod(field.getName(),
pojoClass));
excelEntity.setList(list);
excelParams.add(excelEntity);
} else if (POIPublicUtil.isJavaClass(field)) {
excelParams.add(createExcelExportEntity(field, targetId,
pojoClass, getMethods));
} else {
List<Method> newMethods = new ArrayList<Method>();
if (getMethods != null) {
newMethods.addAll(getMethods);
}
newMethods.add(POIPublicUtil.getMethod(field.getName(),
pojoClass));
ExcelEntity excel = field.getAnnotation(ExcelEntity.class);
getAllExcelField(exclusions,
StringUtils.isNotEmpty(excel.id()) ? excel.id()
: targetId, POIPublicUtil.getClassFields(field
.getType()), excelParams, field.getType(),
newMethods);
}
}
}
/**
* 创建导出实体对象
*
* @param field
* @param targetId
* @param pojoClass
* @param getMethods
* @return
* @throws Exception
*/
private ExcelExportEntity createExcelExportEntity(Field field,
String targetId, Class<?> pojoClass, List<Method> getMethods)
throws Exception {
Excel excel = field.getAnnotation(Excel.class);
ExcelExportEntity excelEntity = new ExcelExportEntity();
excelEntity.setType(excel.type());
getExcelField(targetId, field, excelEntity, excel, pojoClass);
if (getMethods != null) {
List<Method> newMethods = new ArrayList<Method>();
newMethods.addAll(getMethods);
newMethods.add(excelEntity.getMethod());
excelEntity.setMethods(newMethods);
}
return excelEntity;
}
/**
* 判断在这个单元格显示的名称
*
* @param exportName
* @param targetId
* @return
*/
public String getExcelName(String exportName, String targetId) {
if (exportName.indexOf(",") < 0) {
return exportName;
}
String[] arr = exportName.split(",");
for (String str : arr) {
if (str.indexOf(targetId) != -1) {
return str.split("_")[0];
}
}
return null;
}
/**
* 获取这个字段的顺序
*
* @param orderNum
* @param targetId
* @return
*/
public int getCellOrder(String orderNum, String targetId) {
if (isInteger(orderNum) || targetId == null) {
return Integer.valueOf(orderNum);
}
String[] arr = orderNum.split(",");
String[] temp;
for (String str : arr) {
temp = str.split("_");
if (targetId.equals(temp[1])) {
return Integer.valueOf(temp[0]);
}
}
return 0;
}
/**
* 判断字符串是否是整数
*/
public boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
/**
* 注解到导出对象的转换
*
* @param targetId
* @param field
* @param excelEntity
* @param excel
* @param pojoClass
* @throws Exception
*/
private void getExcelField(String targetId, Field field,
ExcelExportEntity excelEntity, Excel excel, Class<?> pojoClass)
throws Exception {
excelEntity.setName(getExcelName(excel.name(), targetId));
excelEntity.setWidth(excel.width());
excelEntity.setHeight(excel.height());
excelEntity.setNeedMerge(excel.needMerge());
excelEntity.setMergeVertical(excel.mergeVertical());
excelEntity.setMergeRely(excel.mergeRely());
excelEntity.setReplace(excel.replace());
excelEntity.setOrderNum(getCellOrder(excel.orderNum(), targetId));
excelEntity.setWrap(excel.isWrap());
excelEntity.setExportImageType(excel.imageType());
excelEntity.setDatabaseFormat(excel.databaseFormat());
excelEntity
.setFormat(StringUtils.isNotEmpty(excel.exportFormat()) ? excel
.exportFormat() : excel.format());
String fieldname = field.getName();
excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass));
}
/**
* 根据注解获取行高
* @param excelParams
* @return
*/
public short getRowHeight(List<ExcelExportEntity> excelParams) {
int maxHeight = 0;
for (int i = 0; i < excelParams.size(); i++) {
maxHeight = maxHeight > excelParams.get(i).getHeight() ? maxHeight
: excelParams.get(i).getHeight();
if (excelParams.get(i).getList() != null) {
for (int j = 0; j < excelParams.get(i).getList().size(); j++) {
maxHeight = maxHeight > excelParams.get(i).getList().get(j)
.getHeight() ? maxHeight : excelParams.get(i)
.getList().get(j).getHeight();
}
}
}
return (short) (maxHeight * 50);
}
/**
* 对字段根据用户设置排序
*/
public void sortAllParams(List<ExcelExportEntity> excelParams) {
Collections.sort(excelParams, new ComparatorExcelField());
for (ExcelExportEntity entity : excelParams) {
if (entity.getList() != null) {
Collections.sort(entity.getList(), new ComparatorExcelField());
}
}
}
/**
* 获取填如这个cell的值,提供一些附加功能
*
* @param entity
* @param obj
* @return
* @throws Exception
*/
public Object getCellValue(ExcelExportEntity entity, Object obj)
throws Exception {
Object value = entity.getMethods() != null ? getFieldBySomeMethod(
entity.getMethods(), obj) : entity.getMethod().invoke(obj,
new Object[] {});
if (needHanlderList != null
&& needHanlderList.contains(entity.getName())) {
value = dataHanlder.exportHandler(obj, entity.getName(), value);
} else if (StringUtils.isNotEmpty(entity.getFormat())) {
value = formatValue(value, entity);
} else if (entity.getReplace() != null
&& entity.getReplace().length > 0) {
value = replaceValue(entity.getReplace(), String.valueOf(value));
}
return value == null ? "" : value.toString();
}
private Object replaceValue(String[] replace, String value) {
String[] temp;
for (String str : replace) {
temp = str.split("_");
if (value.equals(temp[1])) {
value = temp[0];
break;
}
}
return value;
}
private Object formatValue(Object value, ExcelExportEntity entity)
throws Exception {
Date temp = null;
if (value instanceof String) {
SimpleDateFormat format = new SimpleDateFormat(
entity.getDatabaseFormat());
temp = format.parse(value.toString());
} else if (value instanceof Date) {
temp = (Date) value;
}
if (temp != null) {
SimpleDateFormat format = new SimpleDateFormat(entity.getFormat());
value = format.format(temp);
}
return value;
}
/**
* 多个反射获取值
*
* @param list
* @param t
* @return
* @throws Exception
*/
public Object getFieldBySomeMethod(List<Method> list, Object t)
throws Exception {
for (Method m : list) {
if (t == null) {
t = "";
break;
}
t = m.invoke(t, new Object[] {});
}
return t;
}
}

+ 1
- 1
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java Wyświetl plik

@@ -19,7 +19,7 @@ import org.jeecgframework.poi.cache.ExcelCache;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.jeecgframework.poi.excel.entity.TemplateExportParams;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.export.ExcelExportBase;
import org.jeecgframework.poi.excel.export.base.ExcelExportBase;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
import org.jeecgframework.poi.util.POIPublicUtil;


+ 27
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/exception/word/WordExportException.java Wyświetl plik

@@ -0,0 +1,27 @@
package org.jeecgframework.poi.exception.word;
import org.jeecgframework.poi.exception.word.enmus.WordExportEnum;
/**
* word导出异常
*
* @author JueYue
* @date 2014年8月9日 下午10:32:51
*/
public class WordExportException extends RuntimeException {
private static final long serialVersionUID = 1L;
public WordExportException() {
super();
}
public WordExportException(String msg) {
super(msg);
}
public WordExportException(WordExportEnum exception) {
super(exception.getMsg());
}
}

+ 29
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/exception/word/enmus/WordExportEnum.java Wyświetl plik

@@ -0,0 +1,29 @@
package org.jeecgframework.poi.exception.word.enmus;
/**
* 导出异常枚举
*
* @author JueYue
* @date 2014年8月9日 下午10:34:58
*/
public enum WordExportEnum {
EXCEL_PARAMS_ERROR("Excel 导出 参数错误"),
EXCEL_HEAD_HAVA_NULL("Excel 表头 有的字段为空"),
EXCEL_NO_HEAD("Excel 没有表头");
private String msg;
WordExportEnum(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

+ 1
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java Wyświetl plik

@@ -29,6 +29,7 @@ public abstract class ExcelDataHandlerDefaultImpl implements IExcelDataHandler {
return needHandlerFields;
}
@Override
public void setNeedHandlerFields(String[] needHandlerFields) {
this.needHandlerFields = needHandlerFields;
}


+ 3
- 2
easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java Wyświetl plik

@@ -9,13 +9,14 @@ package org.jeecgframework.poi.handler.inter;
public interface IExcelDataHandler {
/**
* 获取需要处理的字段,导入和导出统一处理了,
* 减少书写的字段
* 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段
*
* @return
*/
public String[] getNeedHandlerFields();
public void setNeedHandlerFields(String[] fields);
/**
* 导出处理方法
*


+ 17
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelVerifyHandler.java Wyświetl plik

@@ -1,12 +1,22 @@
package org.jeecgframework.poi.handler.inter;
import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult;
/**
* 导入校验接口
*
* @author JueYue
* @date 2014年6月23日 下午11:08:21
*/
public interface IExcelVerifyHandler {
/**
* 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段
*
* @return
*/
public String[] getNeedVerifyFields();
/**
* 导出处理方法
*
@@ -21,4 +31,11 @@ public interface IExcelVerifyHandler {
public ExcelVerifyHanlderResult verifyHandler(Object obj, String name,
Object value);
/**
* 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段
*
* @return
*/
public void setNeedVerifyFields(String[] arr);
}

+ 24
- 5
easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/WordImageEntity.java Wyświetl plik

@@ -1,12 +1,14 @@
package org.jeecgframework.poi.word.entity;
/**
* word导出,图片设置和图片信息
*
* @author JueYue
* @date 2013-11-17
* @version 1.0
*/
public class WordImageEntity {
public static String URL = "url";
public static String Data = "data";
/**
@@ -17,13 +19,30 @@ public class WordImageEntity {
* 图片宽度
*/
private int width;
//图片高度
// 图片高度
private int height;
//图片地址
// 图片地址
private String url;
//图片信息
// 图片信息
private byte[] data;
public WordImageEntity() {
}
public WordImageEntity(String url, int width, int height) {
this.url = url;
this.width = width;
this.height = height;
}
public WordImageEntity(byte[] data, int width, int height) {
this.data = data;
this.width = width;
this.height = height;
this.type = Data;
}
public String getType() {
return type;
}


+ 69
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/params/ExcelListEntity.java Wyświetl plik

@@ -0,0 +1,69 @@
package org.jeecgframework.poi.word.entity.params;
import java.util.List;
import org.jeecgframework.poi.excel.entity.ExcelBaseParams;
import org.jeecgframework.poi.handler.inter.IExcelDataHandler;
/**
* Excel 导出对象
*
* @author JueYue
* @date 2014年8月9日 下午10:21:13
*/
public class ExcelListEntity extends ExcelBaseParams {
public ExcelListEntity() {
}
public ExcelListEntity(List<?> list, Class<?> clazz) {
this.list = list;
this.clazz = clazz;
}
public ExcelListEntity(List<?> list, Class<?> clazz,
IExcelDataHandler dataHanlder) {
this.list = list;
this.clazz = clazz;
setDataHanlder(dataHanlder);
}
/**
* 数据源
*/
private List<?> list;
/**
* 实体类对象
*/
private Class<?> clazz;
/**
* 过滤的属性
*/
private String[] exclusions;
public List<?> getList() {
return list;
}
public void setList(List<?> list) {
this.list = list;
}
public Class<?> getClazz() {
return clazz;
}
public void setClazz(Class<?> clazz) {
this.clazz = clazz;
}
public String[] getExclusions() {
return exclusions;
}
public void setExclusions(String[] exclusions) {
this.exclusions = exclusions;
}
}

+ 78
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/params/ListParamEntity.java Wyświetl plik

@@ -0,0 +1,78 @@
package org.jeecgframework.poi.word.entity.params;
/**
* Excel 对象导出结构
*
* @author JueYue
* @date 2014年7月26日 下午11:14:48
*/
public class ListParamEntity {
// 唯一值,在遍历中重复使用
public static final String SINGLE = "single";
// 属于数组类型
public static final String LIST = "list";
/**
* 属性名称
*/
private String name;
/**
* 目标
*/
private String target;
/**
* 当是唯一值的时候直接求出值
*/
private Object value;
/**
* 数据类型,SINGLE || LIST
*/
private String type;
public ListParamEntity() {
}
public ListParamEntity(String name, String target) {
this.name = name;
this.target = target;
this.type = LIST;
}
public ListParamEntity(String name, Object value) {
this.name = name;
this.value = value;
this.type = LIST;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}

+ 104
- 120
easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java Wyświetl plik

@@ -14,6 +14,9 @@ import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.jeecgframework.poi.cache.WordCache;
import org.jeecgframework.poi.word.entity.JeecgXWPFDocument;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
import org.jeecgframework.poi.word.parse.excel.ExcelEntityParse;
import org.jeecgframework.poi.word.parse.excel.ExcelMapParse;
import org.jeecgframework.poi.word.util.ParseWordUtil;
/**
@@ -23,7 +26,7 @@ import org.jeecgframework.poi.word.util.ParseWordUtil;
* @date 2013-11-16
* @version 1.0
*/
@SuppressWarnings({"unchecked","rawtypes"})
@SuppressWarnings({ "unchecked", "rawtypes" })
public class ParseWord07 {
/**
@@ -34,28 +37,31 @@ public class ParseWord07 {
* @return
* @throws Exception
*/
public XWPFDocument parseWord(String url, Map<String, Object> map)
public XWPFDocument parseWord(String url, Map<String, Object> map)
throws Exception {
JeecgXWPFDocument doc = WordCache.getXWPFDocumen(url);
parseWordSetValue(doc, map);
return doc;
}
/**
* 按用户模板导出
* @param document
* @param map
* 解析07版的Word并且进行赋值
*
* @Author JueYue
* @date 2013-11-16
* @return
* @throws Exception
*/
public void parseWord(XWPFDocument document, Map<String, Object> map) throws Exception {
parseWordSetValue((JeecgXWPFDocument)document, map);
public void parseWord(XWPFDocument document, Map<String, Object> map)
throws Exception {
parseWordSetValue((JeecgXWPFDocument) document, map);
}
private void parseWordSetValue(JeecgXWPFDocument doc,
private void parseWordSetValue(JeecgXWPFDocument doc,
Map<String, Object> map) throws Exception {
//第一步解析文档
parseAllParagraphic(doc.getParagraphs(),map);
//第二步解析所有表格
// 第一步解析文档
parseAllParagraphic(doc.getParagraphs(), map);
// 第二步解析所有表格
XWPFTable table;
Iterator<XWPFTable> itTable = doc.getTablesIterator();
while (itTable.hasNext()) {
@@ -64,18 +70,19 @@ public class ParseWord07 {
parseThisTable(table, map);
}
}
}
/**
* 解析所有的文本
*@Author JueYue
*@date 2013-11-17
*@param paragraphs
*@param map
*
* @Author JueYue
* @date 2013-11-17
* @param paragraphs
* @param map
*/
private void parseAllParagraphic(List<XWPFParagraph> paragraphs,
Map<String, Object> map) throws Exception {
private void parseAllParagraphic(List<XWPFParagraph> paragraphs,
Map<String, Object> map) throws Exception {
XWPFParagraph paragraph;
for (int i = 0; i < paragraphs.size(); i++) {
paragraph = paragraphs.get(i);
@@ -84,7 +91,7 @@ public class ParseWord07 {
}
}
}
/**
@@ -95,92 +102,59 @@ public class ParseWord07 {
* @param table
* @param map
*/
private void parseThisTable(XWPFTable table, Map<String, Object> map) throws Exception {
private void parseThisTable(XWPFTable table, Map<String, Object> map)
throws Exception {
XWPFTableRow row;
List<XWPFTableCell> cells;
Object listobj;
for (int i = 0; i < table.getNumberOfRows(); i++) {
row = table.getRow(i);
cells = row.getTableCells();
if(cells.size() == 1){
listobj = checkThisTableIsNeedIterator(cells.get(0),map);
if(listobj==null){
parseThisRow(cells,map);
}else{
table.removeRow(i);//删除这一行
parseNextRowAndAddRow(table,i,(List) listobj);
}
}else{
parseThisRow(cells,map);
}
}
}
/**
* 解析下一行,并且生成更多的行
*@Author JueYue
*@date 2013-11-18
*@param table
*@param listobj2
*/
private void parseNextRowAndAddRow(XWPFTable table,int index, List<Object> list) throws Exception {
XWPFTableRow currentRow = table.getRow(index);
String[] params = parseCurrentRowGetParams(currentRow);
table.removeRow(index);//移除这一行
int cellIndex = 0;//创建完成对象一行好像多了一个cell
for(Object obj :list){
currentRow = table.createRow();
for(cellIndex = 0;cellIndex<currentRow.getTableCells().size();cellIndex++){
currentRow.getTableCells().get(cellIndex).setText(
ParseWordUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0).toString());
ExcelEntityParse excelEntityParse = new ExcelEntityParse();
for (int i = 0; i < table.getNumberOfRows(); i++) {
row = table.getRow(i);
cells = row.getTableCells();
if (cells.size() == 1) {
listobj = checkThisTableIsNeedIterator(cells.get(0), map);
if (listobj == null) {
parseThisRow(cells, map);
} else if (listobj instanceof ExcelListEntity) {
table.removeRow(i);// 删除这一行
excelEntityParse.parseNextRowAndAddRow(table, i,
(ExcelListEntity) listobj);
} else {
table.removeRow(i);// 删除这一行
ExcelMapParse.parseNextRowAndAddRow(table, i,
(List) listobj);
}
} else {
parseThisRow(cells, map);
}
for (;cellIndex<params.length;cellIndex++) {
currentRow.createCell().setText(
ParseWordUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0).toString());
}
}
}
/**
* 解析参数行,获取参数列表
*@Author JueYue
*@date 2013-11-18
*@param currentRow
*@return
*/
private String[] parseCurrentRowGetParams(XWPFTableRow currentRow) {
List<XWPFTableCell> cells = currentRow.getTableCells();
String[] params = new String[cells.size()];
String text;
for (int i=0;i<cells.size();i++) {
text = cells.get(i).getText();
params[i] = text==null?"":text.trim().replace("{{","").replace("}}","");
}
return params;
}
private void parseThisRow(List<XWPFTableCell> cells,
Map<String, Object> map) throws Exception {
private void parseThisRow(List<XWPFTableCell> cells, Map<String, Object> map)
throws Exception {
for (XWPFTableCell cell : cells) {
parseAllParagraphic(cell.getParagraphs(),map);
}
parseAllParagraphic(cell.getParagraphs(), map);
}
}
/**
*判断是不是迭代输出
*@Author JueYue
*@date 2013-11-18
*@return
* @throws Exception
* 判断是不是迭代输出
*
* @Author JueYue
* @date 2013-11-18
* @return
* @throws Exception
*/
private Object checkThisTableIsNeedIterator(XWPFTableCell cell
, Map<String, Object> map) throws Exception {
private Object checkThisTableIsNeedIterator(XWPFTableCell cell,
Map<String, Object> map) throws Exception {
String text = cell.getText().trim();
//判断是不是迭代输出
if(text.startsWith("{{")&&text.endsWith("}}")&&text.indexOf("in ")!=-1){
return ParseWordUtil.getRealValue(text.replace("in ", "").trim(),map);
// 判断是不是迭代输出
if (text.startsWith("{{") && text.endsWith("}}")
&& text.indexOf("in ") != -1) {
/*text = text.replace("{{", "").replace("}}", "")
.replaceAll("\\s{1,}", " ").trim();*/
return ParseWordUtil.getRealValue(text.replace("in ", "").trim(),
map);
}
return null;
}
@@ -193,8 +167,8 @@ public class ParseWord07 {
* @param paragraph
* @param map
*/
private void parseThisParagraph(XWPFParagraph paragraph,
Map<String, Object> map) throws Exception {
private void parseThisParagraph(XWPFParagraph paragraph,
Map<String, Object> map) throws Exception {
XWPFRun run;
XWPFRun currentRun = null;// 拿到的第一个run,用来set值,可以保存格式
String currentText = "";// 存放当前的text
@@ -225,7 +199,7 @@ public class ParseWord07 {
currentText = text;
isfinde = true;
currentRun = run;
}else{
} else {
currentText = "";
}
if (currentText.indexOf("}}") != -1) {
@@ -243,16 +217,16 @@ public class ParseWord07 {
* @Author JueYue
* @date 2013-11-16
*/
private void changeValues(XWPFParagraph paragraph,
XWPFRun currentRun, String currentText, List<Integer> runIndex,
Map<String, Object> map) throws Exception {
private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun,
String currentText, List<Integer> runIndex, Map<String, Object> map)
throws Exception {
Object obj = ParseWordUtil.getRealValue(currentText, map);
if(obj instanceof WordImageEntity){//如果是图片就设置为图片
if (obj instanceof WordImageEntity) {// 如果是图片就设置为图片
currentRun.setText("", 0);
addAnImage((WordImageEntity)obj,currentRun);
}else{
addAnImage((WordImageEntity) obj, currentRun);
} else {
currentText = obj.toString();
currentRun.setText(currentText,0);
currentRun.setText(currentText, 0);
}
for (int k = 0; k < runIndex.size(); k++) {
paragraph.getRuns().get(runIndex.get(k)).setText("", 0);
@@ -262,28 +236,38 @@ public class ParseWord07 {
/**
* 添加图片
*@Author JueYue
*@date 2013-11-20
*@param obj
*@param currentRun
* @throws Exception
*
* @Author JueYue
* @date 2013-11-20
* @param obj
* @param currentRun
* @throws Exception
*/
private void addAnImage(WordImageEntity obj, XWPFRun currentRun) throws Exception {
Object [] isAndType = ParseWordUtil.getIsAndType(obj);
private void addAnImage(WordImageEntity obj, XWPFRun currentRun)
throws Exception {
Object[] isAndType = ParseWordUtil.getIsAndType(obj);
String picId;
try {
picId = currentRun.getParagraph().getDocument().addPictureData(
(byte[]) isAndType[0],
(Integer) isAndType[1]);
((JeecgXWPFDocument) currentRun.getParagraph().getDocument()).createPicture(
currentRun,picId,
currentRun.getParagraph().getDocument().getNextPicNameNumber((Integer) isAndType[1]),
obj.getWidth(),obj.getHeight());
picId = currentRun
.getParagraph()
.getDocument()
.addPictureData((byte[]) isAndType[0],
(Integer) isAndType[1]);
((JeecgXWPFDocument) currentRun.getParagraph().getDocument())
.createPicture(
currentRun,
picId,
currentRun
.getParagraph()
.getDocument()
.getNextPicNameNumber(
(Integer) isAndType[1]),
obj.getWidth(), obj.getHeight());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

+ 208
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java Wyświetl plik

@@ -0,0 +1,208 @@
package org.jeecgframework.poi.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.lang.StringUtils;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.export.base.ExportBase;
import org.jeecgframework.poi.exception.word.WordExportException;
import org.jeecgframework.poi.exception.word.enmus.WordExportEnum;
import org.jeecgframework.poi.util.POIPublicUtil;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
/**
* 解析实体类对象 复用注解
*
* @author JueYue
* @date 2014年8月9日 下午10:30:57
*/
public class ExcelEntityParse extends ExportBase {
/**
* 解析上一行并生成更多行
*
* @param table
* @param i
* @param listobj
*/
public void parseNextRowAndAddRow(XWPFTable table, int index,
ExcelListEntity entity) {
checkExcelParams(entity);
// 获取表头数据
Map<String, Integer> titlemap = getTitleMap(table, index);
try {
// 得到所有字段
Field fileds[] = POIPublicUtil.getClassFields(entity.getClazz());
ExcelTarget etarget = entity.getClazz().getAnnotation(
ExcelTarget.class);
String targetId = null;
if (etarget != null) {
targetId = etarget.value();
}
// 获取实体对象的导出数据
List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
getAllExcelField(null, targetId, fileds, excelParams,
entity.getClazz(), null);
// 根据表头进行筛选排序
sortAndFilterExportField(excelParams, titlemap);
short rowHeight = getRowHeight(excelParams);
Iterator<?> its = entity.getList().iterator();
while (its.hasNext()) {
Object t = its.next();
index += createCells(index, t, excelParams, table, rowHeight);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private int createCells(int index, Object t,
List<ExcelExportEntity> excelParams, XWPFTable table,
short rowHeight) throws Exception {
ExcelExportEntity entity;
XWPFTableRow row = table.createRow();
row.setHeight(rowHeight);
int maxHeight = 1, cellNum = 0;
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;
for (Object obj : list) {
createListCells(index + listC, cellNum, obj,
entity.getList(), table);
listC++;
}
cellNum += entity.getList().size();
if (list != null && list.size() > maxHeight) {
maxHeight = list.size();
}
} else {
Object value = getCellValue(entity, t);
if (entity.getType() == 1) {
setCellValue(row, value, cellNum++);
}
}
}
// 合并需要合并的单元格
cellNum = 0;
for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) {
entity = excelParams.get(k);
if (entity.getList() != null) {
cellNum += entity.getList().size();
} else if (entity.isNeedMerge()) {
table.setCellMargins(index, index + maxHeight - 1, cellNum,
cellNum);
cellNum++;
}
}
return maxHeight;
}
/**
* 创建List之后的各个Cells
*
* @param styles
*/
public void createListCells(int index, int cellNum, Object obj,
List<ExcelExportEntity> excelParams, XWPFTable table)
throws Exception {
ExcelExportEntity entity;
XWPFTableRow row;
if (table.getRow(index) == null) {
row = table.createRow();
row.setHeight(getRowHeight(excelParams));
} else {
row = table.getRow(index);
}
for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) {
entity = excelParams.get(k);
Object value = getCellValue(entity, obj);
if (entity.getType() == 1) {
setCellValue(row, value, cellNum++);
}
}
}
private void setCellValue(XWPFTableRow row, Object value, int cellNum) {
if (row.getCell(cellNum++) != null) {
row.getCell(cellNum - 1).setText(
value == null ? "" : value.toString());
} else {
row.createCell().setText(value == null ? "" : value.toString());
}
}
/**
* 对导出序列进行排序和塞选
*
* @param excelParams
* @param titlemap
* @return
*/
private void sortAndFilterExportField(List<ExcelExportEntity> excelParams,
Map<String, Integer> titlemap) {
for (int i = excelParams.size() - 1; i >= 0; i--) {
if (excelParams.get(i).getList() != null
&& excelParams.get(i).getList().size() > 0) {
sortAndFilterExportField(excelParams.get(i).getList(), titlemap);
if (excelParams.get(i).getList().size() == 0) {
excelParams.remove(i);
} else {
excelParams.get(i).setOrderNum(i);
}
} else {
if (titlemap.containsKey(excelParams.get(i).getName())) {
excelParams.get(i).setOrderNum(i);
} else {
excelParams.remove(i);
}
}
}
sortAllParams(excelParams);
}
/**
* 获取表头数据
*
* @param table
* @param index
* @return
*/
private Map<String, Integer> getTitleMap(XWPFTable table, int index) {
if (index == 0) {
throw new WordExportException(WordExportEnum.EXCEL_NO_HEAD);
}
List<XWPFTableCell> cells = table.getRow(index - 1).getTableCells();
Map<String, Integer> map = new HashMap<String, Integer>(cells.size());
String text;
for (int i = 0; i < cells.size(); i++) {
text = cells.get(i).getText();
if (StringUtils.isEmpty(text)) {
throw new WordExportException(
WordExportEnum.EXCEL_HEAD_HAVA_NULL);
}
map.put(text, i);
}
return map;
}
private static void checkExcelParams(ExcelListEntity entity) {
if (entity.getList() == null || entity.getClazz() == null) {
throw new WordExportException(WordExportEnum.EXCEL_PARAMS_ERROR);
}
}
}

+ 71
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java Wyświetl plik

@@ -0,0 +1,71 @@
package org.jeecgframework.poi.word.parse.excel;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.jeecgframework.poi.word.util.ParseWordUtil;
/**
* 处理和生成Map 类型的数据变成表格
* @author JueYue
* @date 2014年8月9日 下午10:28:46
*/
public final class ExcelMapParse {
/**
* 解析下一行,并且生成更多的行
*
* @Author JueYue
* @date 2013-11-18
* @param table
* @param listobj2
*/
public static void parseNextRowAndAddRow(XWPFTable table, int index,
List<Object> list) throws Exception {
XWPFTableRow currentRow = table.getRow(index);
String[] params = parseCurrentRowGetParams(currentRow);
table.removeRow(index);// 移除这一行
int cellIndex = 0;// 创建完成对象一行好像多了一个cell
for (Object obj : list) {
currentRow = table.createRow();
for (cellIndex = 0; cellIndex < currentRow.getTableCells().size(); cellIndex++) {
currentRow
.getTableCells()
.get(cellIndex)
.setText(
ParseWordUtil.getValueDoWhile(obj,
params[cellIndex].split("\\."), 0)
.toString());
}
for (; cellIndex < params.length; cellIndex++) {
currentRow.createCell().setText(
ParseWordUtil.getValueDoWhile(obj,
params[cellIndex].split("\\."), 0).toString());
}
}
}
/**
* 解析参数行,获取参数列表
*
* @Author JueYue
* @date 2013-11-18
* @param currentRow
* @return
*/
private static String[] parseCurrentRowGetParams(XWPFTableRow currentRow) {
List<XWPFTableCell> cells = currentRow.getTableCells();
String[] params = new String[cells.size()];
String text;
for (int i = 0; i < cells.size(); i++) {
text = cells.get(i).getText();
params[i] = text == null ? "" : text.trim().replace("{{", "")
.replace("}}", "");
}
return params;
}
}

+ 3
- 1
easypoi-base/src/main/java/org/jeecgframework/poi/word/util/ParseWordUtil.java Wyświetl plik

@@ -12,10 +12,12 @@ import javax.imageio.ImageIO;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jeecgframework.poi.util.POIPublicUtil;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
/**
* 解析公告类
* Excel 实体注解,暂时不支持图片
* @author JueYue
* @date 2014-7-24
* @version 1.1
@@ -37,7 +39,7 @@ public class ParseWordUtil {
currentText.indexOf("}}"));
Object obj = getParamsValue(params.trim(),map);
//判断图片或者是集合
if(obj instanceof WordImageEntity||obj instanceof List){
if(obj instanceof WordImageEntity||obj instanceof List ||obj instanceof ExcelListEntity){
return obj;
}else{
currentText = currentText.replace("{{" + params + "}}",


+ 6
- 0
easypoi-test/.classpath Wyświetl plik

@@ -21,5 +21,11 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

+ 1
- 1
easypoi-test/pom.xml Wyświetl plik

@@ -4,7 +4,7 @@
<parent>
<groupId>org.jeecgframework</groupId>
<artifactId>easypoi</artifactId>
<version>2.0.1</version>
<version>2.0.2</version>
</parent>
<artifactId>easypoi-test</artifactId>
<dependencies>


+ 13
- 0
easypoi-test/src/main/java/org/jeecgframework/poi/UtilTest.java Wyświetl plik

@@ -0,0 +1,13 @@
package org.jeecgframework.poi;
public class UtilTest {
public static void main(String[] args) {
String text = " {{ p in pList}}";
text = text.replace("{{", "").replace("}}", "").replaceAll("\\s{1,}", " ").trim();
System.out.println(text);
System.out.println(text.length());
}
}

+ 119
- 0
easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilAnnExcelTest.java Wyświetl plik

@@ -0,0 +1,119 @@
package org.jeecgframework.poi.word;
import static org.junit.Assert.*;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jeecgframework.poi.entity.CourseEntity;
import org.jeecgframework.poi.entity.StudentEntity;
import org.jeecgframework.poi.entity.TeacherEntity;
import org.jeecgframework.poi.word.entity.Person;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
import org.junit.Before;
import org.junit.Test;
/**
* 注解导出测试
*
* @author JueYue
* @date 2014年8月9日 下午11:36:33
*/
public class WordExportUtilAnnExcelTest {
private static SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd");
List<CourseEntity> list = new ArrayList<CourseEntity>();
CourseEntity courseEntity;
@Before
public void testBefore() {
courseEntity = new CourseEntity();
courseEntity.setId("1131");
courseEntity.setName("小白");
TeacherEntity teacherEntity = new TeacherEntity();
teacherEntity.setId("12131231");
teacherEntity.setName("你们");
courseEntity.setTeacher(teacherEntity);
teacherEntity = new TeacherEntity();
teacherEntity.setId("121312314312421131");
teacherEntity.setName("老王");
courseEntity.setShuxueteacher(teacherEntity);
StudentEntity studentEntity = new StudentEntity();
studentEntity.setId("11231");
studentEntity.setName("撒旦法司法局");
studentEntity.setBirthday(new Date());
studentEntity.setSex(1);
List<StudentEntity> studentList = new ArrayList<StudentEntity>();
studentList.add(studentEntity);
studentList.add(studentEntity);
courseEntity.setStudents(studentList);
for (int i = 0; i < 3; i++) {
list.add(courseEntity);
}
}
/**
* 简单导出没有图片和Excel
*/
//@Test
public void SimpleWordExport() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("department", "Jeecg");
map.put("person", "JueYue");
map.put("auditPerson", "JueYue");
map.put("time", format.format(new Date()));
List<Person> list = new ArrayList<Person>();
Person p = new Person();
p.setName("小明");
p.setTel("18711111111");
p.setEmail("18711111111@139.com");
list.add(p);
p = new Person();
p.setName("小红");
p.setTel("18711111112");
p.setEmail("18711111112@139.com");
list.add(p);
map.put("pList", new ExcelListEntity(list, Person.class));
try {
XWPFDocument doc = WordExportUtil.exportWord07(
"org/jeecgframework/poi/word/doc/SimpleExcel.docx", map);
FileOutputStream fos = new FileOutputStream("d:/simpleExcel.docx");
doc.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void WordExport() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("department", "Jeecg");
map.put("person", "JueYue");
map.put("auditPerson", "JueYue");
map.put("time", format.format(new Date()));
map.put("cs", new ExcelListEntity(list, CourseEntity.class));
try {
XWPFDocument doc = WordExportUtil.exportWord07(
"org/jeecgframework/poi/word/doc/Excel.docx", map);
FileOutputStream fos = new FileOutputStream("d:/Excel.docx");
doc.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

+ 79
- 0
easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilBaseExcelTest.java Wyświetl plik

@@ -0,0 +1,79 @@
package org.jeecgframework.poi.word;
import static org.junit.Assert.*;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jeecgframework.poi.word.entity.Person;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.junit.Test;
public class WordExportUtilBaseExcelTest {
private static SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd");
/**
* 简单导出没有图片和Excel
*/
@Test
public void SimpleWordExport() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("department", "Jeecg");
map.put("person", "JueYue");
map.put("auditPerson", "JueYue");
map.put("time", format.format(new Date()));
List<Person> list = new ArrayList<Person>();
Person p = new Person();
p.setName("小明");
p.setTel("18711111111");
p.setEmail("18711111111@139.com");
list.add(p);
p = new Person();
p.setName("小红");
p.setTel("18711111112");
p.setEmail("18711111112@139.com");
list.add(p);
map.put("pList", list);
try {
XWPFDocument doc = WordExportUtil.exportWord07(
"org/jeecgframework/poi/word/doc/SimpleExcel.docx", map);
FileOutputStream fos = new FileOutputStream("d:/simpleExcel.docx");
doc.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 简单导出包含图片
*/
//@Test
public void imageWordExport() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("department", "Jeecg");
map.put("person", "JueYue");
map.put("time", format.format(new Date()));
WordImageEntity image = new WordImageEntity();
image.setHeight(200);
image.setWidth(500);
image.setUrl("org/jeecgframework/poi/word/img/testCode.png");
image.setType(WordImageEntity.URL);
map.put("testCode", image);
try {
XWPFDocument doc = WordExportUtil.exportWord07(
"org/jeecgframework/poi/word/doc/Image.docx", map);
FileOutputStream fos = new FileOutputStream("d:/image.docx");
doc.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

BIN
easypoi-test/src/main/java/org/jeecgframework/poi/word/doc/Excel.docx Wyświetl plik


BIN
easypoi-test/src/main/java/org/jeecgframework/poi/word/doc/SimpleExcel.docx Wyświetl plik


+ 43
- 0
easypoi-test/src/main/java/org/jeecgframework/poi/word/entity/Person.java Wyświetl plik

@@ -0,0 +1,43 @@
package org.jeecgframework.poi.word.entity;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* 测试人员类
* @author JueYue
* @date 2014年7月26日 下午10:51:30
*/
public class Person {
@Excel(name = "姓名")
private String name;
@Excel(name = "手机")
private String tel;
@Excel(name = "Email")
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}

+ 1
- 1
easypoi-web/pom.xml Wyświetl plik

@@ -4,7 +4,7 @@
<parent>
<groupId>org.jeecgframework</groupId>
<artifactId>easypoi</artifactId>
<version>2.0.1</version>
<version>2.0.2</version>
</parent>
<artifactId>easypoi-web</artifactId>


+ 2
- 2
pom.xml Wyświetl plik

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.jeecgframework</groupId>
<artifactId>easypoi</artifactId>
<version>2.0.1</version>
<version>2.0.2</version>
<packaging>pom</packaging>
<name>easypoi</name>
<modules>
@@ -122,7 +122,7 @@
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>easypoi-base</artifactId>
<version>2.0.1</version>
<version>2.0.2</version>
</dependency>
</dependencies>
</dependencyManagement>


Ładowanie…
Anuluj
Zapisz