diff --git a/easypoi-base/pom.xml b/easypoi-base/pom.xml
index 312dfd6..3a64ec0 100644
--- a/easypoi-base/pom.xml
+++ b/easypoi-base/pom.xml
@@ -25,6 +25,10 @@
org.apache.poi
poi-scratchpad
+
+ xerces
+ xerces
+
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java
index 8961eb2..e356a85 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java
@@ -9,6 +9,8 @@ import java.util.List;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.result.ExcelImportResult;
import org.jeecgframework.poi.excel.imports.ExcelImportServer;
+import org.jeecgframework.poi.excel.imports.sax.SaxReadExcel;
+import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,12 +42,12 @@ public class ExcelImportUtil {
in = new FileInputStream(file);
result = new ExcelImportServer().importExcelByIs(in, pojoClass, params).getList();
} catch (Exception e) {
- LOGGER.error(e.getMessage(),e);
+ LOGGER.error(e.getMessage(), e);
} finally {
try {
in.close();
} catch (IOException e) {
- LOGGER.error(e.getMessage(),e);
+ LOGGER.error(e.getMessage(), e);
}
}
return result;
@@ -60,8 +62,8 @@ public class ExcelImportUtil {
* @return
* @throws Exception
*/
- public static List importExcelByIs(InputStream inputstream, Class> pojoClass,
- ImportParams params) throws Exception {
+ public static List importExcel(InputStream inputstream, Class> pojoClass,
+ ImportParams params) throws Exception {
return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params).getList();
}
@@ -74,9 +76,8 @@ public class ExcelImportUtil {
* @return
* @throws Exception
*/
- public static ExcelImportResult importExcelByIsAndVerify(InputStream inputstream,
- Class> pojoClass, ImportParams params)
- throws Exception {
+ public static ExcelImportResult importExcelVerify(InputStream inputstream, Class> pojoClass,
+ ImportParams params) throws Exception {
return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params);
}
@@ -96,15 +97,75 @@ public class ExcelImportUtil {
in = new FileInputStream(file);
return new ExcelImportServer().importExcelByIs(in, pojoClass, params);
} catch (Exception e) {
- LOGGER.error(e.getMessage(),e);
+ LOGGER.error(e.getMessage(), e);
} finally {
try {
in.close();
} catch (IOException e) {
- LOGGER.error(e.getMessage(),e);
+ LOGGER.error(e.getMessage(), e);
}
}
return null;
}
+ /**
+ * Excel 通过SAX解析方法,适合大数据导入,不支持图片
+ * 导入 数据源本地文件,不返回校验结果 导入 字 段类型 Integer,Long,Double,Date,String,Boolean
+ *
+ * @param file
+ * @param pojoClass
+ * @param params
+ * @return
+ * @throws Exception
+ */
+ public static List importExcelBySax(File file, Class> pojoClass, ImportParams params) {
+ return new SaxReadExcel().readExcel(file, pojoClass, params, null);
+ }
+
+ /**
+ * Excel 通过SAX解析方法,适合大数据导入,不支持图片
+ * 导入 数据源IO流,不返回校验结果 导入 字段类型 Integer,Long,Double,Date,String,Boolean
+ *
+ * @param file
+ * @param pojoClass
+ * @param params
+ * @return
+ * @throws Exception
+ */
+ public static List importExcelBySax(InputStream inputstream, Class> pojoClass,
+ ImportParams params) throws Exception {
+ return new SaxReadExcel().readExcel(inputstream, pojoClass, params, null);
+ }
+
+ /**
+ * Excel 通过SAX解析方法,适合大数据导入,不支持图片
+ * 导入 数据源本地文件,不返回校验结果 导入 字 段类型 Integer,Long,Double,Date,String,Boolean
+ *
+ * @param file
+ * @param pojoClass
+ * @param params
+ * @return
+ * @throws Exception
+ */
+ public static List importExcelBySax(File file, Class> pojoClass, ImportParams params,
+ ISaxRowRead rowRead) {
+ return new SaxReadExcel().readExcel(file, pojoClass, params, rowRead);
+ }
+
+ /**
+ * Excel 通过SAX解析方法,适合大数据导入,不支持图片
+ * 导入 数据源IO流,不返回校验结果 导入 字段类型 Integer,Long,Double,Date,String,Boolean
+ *
+ * @param file
+ * @param pojoClass
+ * @param params
+ * @return
+ * @throws Exception
+ */
+ public static List importExcelBySax(InputStream inputstream, Class> pojoClass,
+ ImportParams params, ISaxRowRead rowRead)
+ throws Exception {
+ return new SaxReadExcel().readExcel(inputstream, pojoClass, params, rowRead);
+ }
+
}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java
index 139d1fe..a8fe0ba 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java
@@ -38,4 +38,9 @@ public class SaxReadCellEntity {
this.value = value;
}
+ @Override
+ public String toString() {
+ return "[type=" + cellType.toString() + ",value=" + value + "]";
+ }
+
}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
index 0222d2b..4fbf792 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
@@ -20,7 +20,6 @@ import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants;
import org.jeecgframework.poi.excel.export.base.ExcelExportBase;
-import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl;
import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java
index 8e41267..c337606 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java
@@ -13,6 +13,7 @@ import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity;
+import org.jeecgframework.poi.excel.entity.sax.SaxReadCellEntity;
import org.jeecgframework.poi.exception.excel.ExcelImportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum;
import org.jeecgframework.poi.handler.inter.IExcelDataHandler;
@@ -28,7 +29,7 @@ import org.slf4j.LoggerFactory;
*/
public class CellValueServer {
- private static final Logger logger = LoggerFactory.getLogger(CellValueServer.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(CellValueServer.class);
private List hanlderList = null;
@@ -79,7 +80,7 @@ public class CellValueServer {
try {
return format.parse(value);
} catch (ParseException e) {
- logger.error("时间格式化失败,格式化:{},值:{}", entity.getFormat(), value);
+ LOGGER.error("时间格式化失败,格式化:{},值:{}", entity.getFormat(), value);
throw new ExcelImportException(ExcelImportEnum.GET_VALUE_ERROR);
}
}
@@ -108,6 +109,29 @@ public class CellValueServer {
return getValueByType(xclass, result);
}
+ /**
+ * 获取cell值
+ * @param dataHanlder
+ * @param object
+ * @param entity
+ * @param excelParams
+ * @param titleString
+ * @return
+ */
+ public Object getValue(IExcelDataHandler dataHanlder, Object object,
+ SaxReadCellEntity cellEntity,
+ Map excelParams, String titleString) {
+ ExcelImportEntity entity = excelParams.get(titleString);
+ Method setMethod = entity.getMethods() != null && entity.getMethods().size() > 0 ? entity
+ .getMethods().get(entity.getMethods().size() - 1) : entity.getMethod();
+ Type[] ts = setMethod.getGenericParameterTypes();
+ String xclass = ts[0].toString();
+ Object result = cellEntity.getValue();
+ result = replaceValue(entity.getReplace(), result);
+ result = hanlderValue(dataHanlder, object, result, titleString);
+ return getValueByType(xclass, result);
+ }
+
/**
* 根据返回类型获取返回值
*
@@ -140,6 +164,7 @@ public class CellValueServer {
}
return result;
} catch (Exception e) {
+ LOGGER.error(e.getMessage(),e);
throw new ExcelImportException(ExcelImportEnum.GET_VALUE_ERROR);
}
}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java
index 70c323b..0223ce5 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java
@@ -39,6 +39,7 @@ import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity;
import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity;
import org.jeecgframework.poi.excel.entity.result.ExcelImportResult;
import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult;
+import org.jeecgframework.poi.excel.imports.base.ImportBaseService;
import org.jeecgframework.poi.excel.imports.verifys.VerifyHandlerServer;
import org.jeecgframework.poi.util.POIPublicUtil;
import org.slf4j.Logger;
@@ -51,7 +52,7 @@ import org.slf4j.LoggerFactory;
* @date 2014年6月26日 下午9:20:51
*/
@SuppressWarnings({ "rawtypes", "unchecked", "hiding" })
-public class ExcelImportServer {
+public class ExcelImportServer extends ImportBaseService {
private final static Logger LOGGER = LoggerFactory.getLogger(ExcelImportServer.class);
@@ -66,39 +67,6 @@ public class ExcelImportServer {
this.verifyHandlerServer = new VerifyHandlerServer();
}
- /**
- * 把这个注解解析放到类型对象中
- *
- * @param targetId
- * @param field
- * @param excelEntity
- * @param pojoClass
- * @param getMethods
- * @param temp
- * @throws Exception
- */
- private void addEntityToMap(String targetId, Field field, ExcelImportEntity excelEntity,
- Class> pojoClass, List getMethods,
- Map temp) throws Exception {
- Excel excel = field.getAnnotation(Excel.class);
- excelEntity = new ExcelImportEntity();
- excelEntity.setType(excel.type());
- excelEntity.setSaveUrl(excel.savePath());
- excelEntity.setSaveType(excel.imageType());
- excelEntity.setReplace(excel.replace());
- excelEntity.setDatabaseFormat(excel.databaseFormat());
- excelEntity.setVerify(getImportVerify(field));
- getExcelField(targetId, field, excelEntity, excel, pojoClass);
- if (getMethods != null) {
- List newMethods = new ArrayList();
- newMethods.addAll(getMethods);
- newMethods.add(excelEntity.getMethod());
- excelEntity.setMethods(newMethods);
- }
- temp.put(excelEntity.getName(), excelEntity);
-
- }
-
/***
* 向List里面继续添加元素
*
@@ -138,141 +106,6 @@ public class ExcelImportServer {
}
}
- /**
- * 获取需要导出的全部字段
- *
- *
- * @param exclusions
- * @param targetId
- * 目标ID
- * @param fields
- * @param excelCollection
- * @throws Exception
- */
- private void getAllExcelField(String targetId, Field[] fields,
- Map excelParams,
- List excelCollection, Class> pojoClass,
- List getMethods) throws Exception {
- ExcelImportEntity excelEntity = null;
- for (int i = 0; i < fields.length; i++) {
- Field field = fields[i];
- if (POIPublicUtil.isNotUserExcelUserThis(null, field, targetId)) {
- continue;
- }
- if (POIPublicUtil.isCollection(field.getType())) {
- // 集合对象设置属性
- ExcelCollectionParams collection = new ExcelCollectionParams();
- collection.setName(field.getName());
- Map temp = new HashMap();
- ParameterizedType pt = (ParameterizedType) field.getGenericType();
- Class> clz = (Class>) pt.getActualTypeArguments()[0];
- collection.setType(clz);
- getExcelFieldList(targetId, POIPublicUtil.getClassFields(clz), clz, temp, null);
- collection.setExcelParams(temp);
- excelCollection.add(collection);
- } else if (POIPublicUtil.isJavaClass(field)) {
- addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, excelParams);
- } else {
- List newMethods = new ArrayList();
- if (getMethods != null) {
- newMethods.addAll(getMethods);
- }
- newMethods.add(POIPublicUtil.getMethod(field.getName(), pojoClass));
- getAllExcelField(targetId, POIPublicUtil.getClassFields(field.getType()),
- excelParams, excelCollection, field.getType(), newMethods);
- }
- }
- }
-
- private void getExcelField(String targetId, Field field, ExcelImportEntity excelEntity,
- Excel excel, Class> pojoClass) throws Exception {
- excelEntity.setName(getExcelName(excel.name(), targetId));
- String fieldname = field.getName();
- excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass, field.getType()));
- if (StringUtils.isEmpty(excel.importFormat())) {
- excelEntity.setFormat(excel.format());
- } else {
- excelEntity.setFormat(excel.importFormat());
- }
- }
-
- private void getExcelFieldList(String targetId, Field[] fields, Class> pojoClass,
- Map temp, List getMethods)
- throws Exception {
- ExcelImportEntity excelEntity = null;
- for (int i = 0; i < fields.length; i++) {
- Field field = fields[i];
- if (POIPublicUtil.isNotUserExcelUserThis(null, field, targetId)) {
- continue;
- }
- if (POIPublicUtil.isJavaClass(field)) {
- addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, temp);
- } else {
- List newMethods = new ArrayList();
- if (getMethods != null) {
- newMethods.addAll(getMethods);
- }
- newMethods
- .add(POIPublicUtil.getMethod(field.getName(), pojoClass, field.getType()));
- getExcelFieldList(targetId, POIPublicUtil.getClassFields(field.getType()),
- field.getType(), temp, newMethods);
- }
- }
- }
-
- /**
- * 判断在这个单元格显示的名称
- *
- * @param exportName
- * @param targetId
- * @return
- */
- private 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;
- }
-
- private Object getFieldBySomeMethod(List list, Object t) throws Exception {
- Method m;
- for (int i = 0; i < list.size() - 1; i++) {
- m = list.get(i);
- t = m.invoke(t, new Object[] {});
- }
- return t;
- }
-
- /**
- * 获取导入校验参数
- *
- * @param field
- * @return
- */
- private ExcelVerifyEntity getImportVerify(Field field) {
- ExcelVerify verify = field.getAnnotation(ExcelVerify.class);
- if (verify != null) {
- ExcelVerifyEntity entity = new ExcelVerifyEntity();
- entity.setEmail(verify.isEmail());
- entity.setInterHandler(verify.interHandler());
- entity.setMaxLength(verify.maxLength());
- entity.setMinLength(verify.minLength());
- entity.setMobile(verify.isMobile());
- entity.setNotNull(verify.notNull());
- entity.setRegex(verify.regex());
- entity.setRegexTip(verify.regexTip());
- entity.setTel(verify.isTel());
- return entity;
- }
- return null;
- }
-
/**
* 获取key的值,针对不同类型获取不同的值
*
@@ -297,23 +130,6 @@ public class ExcelImportServer {
return obj == null ? null : obj.toString();
}
- /**
- * 获取保存的Excel 的真实路径
- *
- * @param params
- * @param pojoClass
- * @return
- * @throws Exception
- */
- private String getSaveExcelUrl(ImportParams params, Class> pojoClass) throws Exception {
- String url = "";
- if (params.getSaveUrl().equals("upload/excelUpload")) {
- url = pojoClass.getName().split("\\.")[pojoClass.getName().split("\\.").length - 1];
- return params.getSaveUrl() + "/" + url;
- }
- return params.getSaveUrl();
- }
-
/**
* 获取保存的真实路径
*
@@ -520,46 +336,4 @@ public class ExcelImportServer {
}
}
- private void saveThisExcel(ImportParams params, Class> pojoClass, boolean isXSSFWorkbook,
- Workbook book) throws Exception {
- String path = POIPublicUtil.getWebRootPath(getSaveExcelUrl(params, pojoClass));
- File savefile = new File(path);
- if (!savefile.exists()) {
- savefile.mkdirs();
- }
- SimpleDateFormat format = new SimpleDateFormat("yyyMMddHHmmss");
- FileOutputStream fos = new FileOutputStream(path + "/" + format.format(new Date()) + "_"
- + Math.round(Math.random() * 100000)
- + (isXSSFWorkbook == true ? ".xlsx" : ".xls"));
- book.write(fos);
- fos.close();
- }
-
- /**
- * 多个get 最后再set
- *
- * @param setMethods
- * @param object
- */
- private void setFieldBySomeMethod(List setMethods, Object object, Object value)
- throws Exception {
- Object t = getFieldBySomeMethod(setMethods, object);
- setMethods.get(setMethods.size() - 1).invoke(t, value);
- }
-
- /**
- *
- * @param entity
- * @param object
- * @param value
- * @throws Exception
- */
- private void setValues(ExcelImportEntity entity, Object object, Object value) throws Exception {
- if (entity.getMethods() != null) {
- setFieldBySomeMethod(entity.getMethods(), object, value);
- } else {
- entity.getMethod().invoke(object, value);
- }
- }
-
}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java
new file mode 100644
index 0000000..322eb01
--- /dev/null
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java
@@ -0,0 +1,259 @@
+package org.jeecgframework.poi.excel.imports.base;
+
+import java.io.File;
+import java.io.FileOutputStream;
+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.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelVerify;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams;
+import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity;
+import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity;
+import org.jeecgframework.poi.util.POIPublicUtil;
+
+/**
+ * 导入基础和,普通方法和Sax共用
+ * @author JueYue
+ * @date 2015年1月9日 下午10:25:53
+ */
+public class ImportBaseService {
+
+ /**
+ * 把这个注解解析放到类型对象中
+ *
+ * @param targetId
+ * @param field
+ * @param excelEntity
+ * @param pojoClass
+ * @param getMethods
+ * @param temp
+ * @throws Exception
+ */
+ public void addEntityToMap(String targetId, Field field, ExcelImportEntity excelEntity,
+ Class> pojoClass, List getMethods,
+ Map temp) throws Exception {
+ Excel excel = field.getAnnotation(Excel.class);
+ excelEntity = new ExcelImportEntity();
+ excelEntity.setType(excel.type());
+ excelEntity.setSaveUrl(excel.savePath());
+ excelEntity.setSaveType(excel.imageType());
+ excelEntity.setReplace(excel.replace());
+ excelEntity.setDatabaseFormat(excel.databaseFormat());
+ excelEntity.setVerify(getImportVerify(field));
+ getExcelField(targetId, field, excelEntity, excel, pojoClass);
+ if (getMethods != null) {
+ List newMethods = new ArrayList();
+ newMethods.addAll(getMethods);
+ newMethods.add(excelEntity.getMethod());
+ excelEntity.setMethods(newMethods);
+ }
+ temp.put(excelEntity.getName(), excelEntity);
+
+ }
+
+ /**
+ * 获取导入校验参数
+ *
+ * @param field
+ * @return
+ */
+ public ExcelVerifyEntity getImportVerify(Field field) {
+ ExcelVerify verify = field.getAnnotation(ExcelVerify.class);
+ if (verify != null) {
+ ExcelVerifyEntity entity = new ExcelVerifyEntity();
+ entity.setEmail(verify.isEmail());
+ entity.setInterHandler(verify.interHandler());
+ entity.setMaxLength(verify.maxLength());
+ entity.setMinLength(verify.minLength());
+ entity.setMobile(verify.isMobile());
+ entity.setNotNull(verify.notNull());
+ entity.setRegex(verify.regex());
+ entity.setRegexTip(verify.regexTip());
+ entity.setTel(verify.isTel());
+ return entity;
+ }
+ return null;
+ }
+
+ /**
+ * 获取需要导出的全部字段
+ *
+ *
+ * @param exclusions
+ * @param targetId
+ * 目标ID
+ * @param fields
+ * @param excelCollection
+ * @throws Exception
+ */
+ public void getAllExcelField(String targetId, Field[] fields,
+ Map excelParams,
+ List excelCollection, Class> pojoClass,
+ List getMethods) throws Exception {
+ ExcelImportEntity excelEntity = null;
+ for (int i = 0; i < fields.length; i++) {
+ Field field = fields[i];
+ if (POIPublicUtil.isNotUserExcelUserThis(null, field, targetId)) {
+ continue;
+ }
+ if (POIPublicUtil.isCollection(field.getType())) {
+ // 集合对象设置属性
+ ExcelCollectionParams collection = new ExcelCollectionParams();
+ collection.setName(field.getName());
+ Map temp = new HashMap();
+ ParameterizedType pt = (ParameterizedType) field.getGenericType();
+ Class> clz = (Class>) pt.getActualTypeArguments()[0];
+ collection.setType(clz);
+ getExcelFieldList(targetId, POIPublicUtil.getClassFields(clz), clz, temp, null);
+ collection.setExcelParams(temp);
+ excelCollection.add(collection);
+ } else if (POIPublicUtil.isJavaClass(field)) {
+ addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, excelParams);
+ } else {
+ List newMethods = new ArrayList();
+ if (getMethods != null) {
+ newMethods.addAll(getMethods);
+ }
+ newMethods.add(POIPublicUtil.getMethod(field.getName(), pojoClass));
+ getAllExcelField(targetId, POIPublicUtil.getClassFields(field.getType()),
+ excelParams, excelCollection, field.getType(), newMethods);
+ }
+ }
+ }
+
+ public void getExcelField(String targetId, Field field, ExcelImportEntity excelEntity,
+ Excel excel, Class> pojoClass) throws Exception {
+ excelEntity.setName(getExcelName(excel.name(), targetId));
+ String fieldname = field.getName();
+ excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass, field.getType()));
+ if (StringUtils.isEmpty(excel.importFormat())) {
+ excelEntity.setFormat(excel.format());
+ } else {
+ excelEntity.setFormat(excel.importFormat());
+ }
+ }
+
+ public void getExcelFieldList(String targetId, Field[] fields, Class> pojoClass,
+ Map temp, List getMethods)
+ throws Exception {
+ ExcelImportEntity excelEntity = null;
+ for (int i = 0; i < fields.length; i++) {
+ Field field = fields[i];
+ if (POIPublicUtil.isNotUserExcelUserThis(null, field, targetId)) {
+ continue;
+ }
+ if (POIPublicUtil.isJavaClass(field)) {
+ addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, temp);
+ } else {
+ List newMethods = new ArrayList();
+ if (getMethods != null) {
+ newMethods.addAll(getMethods);
+ }
+ newMethods
+ .add(POIPublicUtil.getMethod(field.getName(), pojoClass, field.getType()));
+ getExcelFieldList(targetId, POIPublicUtil.getClassFields(field.getType()),
+ field.getType(), temp, newMethods);
+ }
+ }
+ }
+
+ /**
+ * 判断在这个单元格显示的名称
+ *
+ * @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;
+ }
+
+ public Object getFieldBySomeMethod(List list, Object t) throws Exception {
+ Method m;
+ for (int i = 0; i < list.size() - 1; i++) {
+ m = list.get(i);
+ t = m.invoke(t, new Object[] {});
+ }
+ return t;
+ }
+
+ public void saveThisExcel(ImportParams params, Class> pojoClass, boolean isXSSFWorkbook,
+ Workbook book) throws Exception {
+ String path = POIPublicUtil.getWebRootPath(getSaveExcelUrl(params, pojoClass));
+ File savefile = new File(path);
+ if (!savefile.exists()) {
+ savefile.mkdirs();
+ }
+ SimpleDateFormat format = new SimpleDateFormat("yyyMMddHHmmss");
+ FileOutputStream fos = new FileOutputStream(path + "/" + format.format(new Date()) + "_"
+ + Math.round(Math.random() * 100000)
+ + (isXSSFWorkbook == true ? ".xlsx" : ".xls"));
+ book.write(fos);
+ fos.close();
+ }
+
+ /**
+ * 获取保存的Excel 的真实路径
+ *
+ * @param params
+ * @param pojoClass
+ * @return
+ * @throws Exception
+ */
+ public String getSaveExcelUrl(ImportParams params, Class> pojoClass) throws Exception {
+ String url = "";
+ if (params.getSaveUrl().equals("upload/excelUpload")) {
+ url = pojoClass.getName().split("\\.")[pojoClass.getName().split("\\.").length - 1];
+ return params.getSaveUrl() + "/" + url;
+ }
+ return params.getSaveUrl();
+ }
+
+ /**
+ * 多个get 最后再set
+ *
+ * @param setMethods
+ * @param object
+ */
+ public void setFieldBySomeMethod(List setMethods, Object object, Object value)
+ throws Exception {
+ Object t = getFieldBySomeMethod(setMethods, object);
+ setMethods.get(setMethods.size() - 1).invoke(t, value);
+ }
+
+ /**
+ *
+ * @param entity
+ * @param object
+ * @param value
+ * @throws Exception
+ */
+ public void setValues(ExcelImportEntity entity, Object object, Object value) throws Exception {
+ if (entity.getMethods() != null) {
+ setFieldBySomeMethod(entity.getMethods(), object, value);
+ } else {
+ entity.getMethod().invoke(object, value);
+ }
+ }
+
+}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SaxReadExcel.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SaxReadExcel.java
index 1d2c8cf..31682d0 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SaxReadExcel.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SaxReadExcel.java
@@ -1,18 +1,19 @@
package org.jeecgframework.poi.excel.imports.sax;
-import java.io.IOException;
+import java.io.File;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead;
import org.jeecgframework.poi.excel.imports.sax.parse.SaxRowRead;
+import org.jeecgframework.poi.exception.excel.ExcelImportException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -27,12 +28,38 @@ import org.xml.sax.helpers.XMLReaderFactory;
*/
public class SaxReadExcel {
- public List readExcel(InputStream inputstream, Class> pojoClass, ImportParams params) {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SaxReadExcel.class);
+
+ public List readExcel(InputStream inputstream, Class> pojoClass, ImportParams params,
+ ISaxRowRead rowRead) {
try {
OPCPackage opcPackage = OPCPackage.open(inputstream);
+ return readExcel(opcPackage, pojoClass, params, rowRead);
+ } catch (Exception e) {
+ LOGGER.error(e.getMessage(), e);
+ throw new ExcelImportException(e.getMessage());
+ }
+ }
+
+ public List readExcel(File file, Class> pojoClass, ImportParams params,
+ ISaxRowRead rowRead) {
+ try {
+ OPCPackage opcPackage = OPCPackage.open(file);
+ return readExcel(opcPackage, pojoClass, params, rowRead);
+ } catch (Exception e) {
+ LOGGER.error(e.getMessage(), e);
+ throw new ExcelImportException(e.getMessage());
+ }
+ }
+
+ private List readExcel(OPCPackage opcPackage, Class> pojoClass, ImportParams params,
+ ISaxRowRead rowRead) {
+ try {
XSSFReader xssfReader = new XSSFReader(opcPackage);
SharedStringsTable sst = xssfReader.getSharedStringsTable();
- ISaxRowRead rowRead = new SaxRowRead();
+ if (rowRead == null) {
+ rowRead = new SaxRowRead(pojoClass, params);
+ }
XMLReader parser = fetchSheetParser(sst, rowRead);
Iterator sheets = xssfReader.getSheetsData();
int sheetIndex = 0;
@@ -45,13 +72,13 @@ public class SaxReadExcel {
}
return rowRead.getList();
} catch (Exception e) {
+ LOGGER.error(e.getMessage(), e);
+ throw new ExcelImportException("SAX导入数据失败");
}
-
- return null;
}
- public XMLReader fetchSheetParser(SharedStringsTable sst, ISaxRowRead rowRead)
- throws SAXException {
+ private XMLReader fetchSheetParser(SharedStringsTable sst, ISaxRowRead rowRead)
+ throws SAXException {
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
ContentHandler handler = new SheetHandler(sst, rowRead);
parser.setContentHandler(handler);
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SheetHandler.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SheetHandler.java
index d955e8c..2af5fbe 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SheetHandler.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/SheetHandler.java
@@ -99,16 +99,15 @@ 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)) {
+ rowlist.add(curCol, new SaxReadCellEntity(CellValueType.String, value));
}
curCol++;
- } else {
- //如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法
- if (name.equals("row")) {
- read.parse(curRow, rowlist);
- rowlist.clear();
- curRow++;
- curCol = 0;
- }
+ } else if (name.equals("row")) {//如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法
+ read.parse(curRow, rowlist);
+ rowlist.clear();
+ curRow++;
+ curCol = 0;
}
}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java
index 1486bc1..5c15c88 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java
@@ -1,8 +1,24 @@
package org.jeecgframework.poi.excel.imports.sax.parse;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+import org.jeecgframework.poi.excel.annotation.ExcelTarget;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams;
+import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity;
import org.jeecgframework.poi.excel.entity.sax.SaxReadCellEntity;
+import org.jeecgframework.poi.excel.imports.CellValueServer;
+import org.jeecgframework.poi.excel.imports.base.ImportBaseService;
+import org.jeecgframework.poi.exception.excel.ExcelImportException;
+import org.jeecgframework.poi.util.POIPublicUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
@@ -12,13 +28,52 @@ import com.google.common.collect.Lists;
* @param
* @date 2015年1月1日 下午7:59:39
*/
-@SuppressWarnings("rawtypes")
-public class SaxRowRead implements ISaxRowRead {
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public class SaxRowRead extends ImportBaseService implements ISaxRowRead {
- private List list;
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(SaxRowRead.class);
+ /** 需要返回的数据 **/
+ private List list;
+ /** 导出的对象 **/
+ private Class> pojoClass;
+ /** 导入参数 **/
+ private ImportParams params;
+ /** 列表头对应关系 **/
+ private Map titlemap = new HashMap();
+ /** 当前的对象**/
+ private Object object = null;
- public SaxRowRead() {
+ private Map excelParams = new HashMap();
+
+ private List excelCollection = new ArrayList();
+
+ private String targetId;
+
+ private CellValueServer cellValueServer;
+
+ public SaxRowRead(Class> pojoClass, ImportParams params) {
list = Lists.newArrayList();
+ this.params = params;
+ this.pojoClass = pojoClass;
+ cellValueServer = new CellValueServer();
+ initParams(pojoClass, params);
+ }
+
+ private void initParams(Class> pojoClass, ImportParams params) {
+ try {
+
+ Field fileds[] = POIPublicUtil.getClassFields(pojoClass);
+ ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
+ if (etarget != null) {
+ targetId = etarget.value();
+ }
+ getAllExcelField(targetId, fileds, excelParams, excelCollection, pojoClass, null);
+ } catch (Exception e) {
+ LOGGER.error(e.getMessage(), e);
+ throw new ExcelImportException(e.getMessage());
+ }
+
}
@Override
@@ -28,7 +83,111 @@ public class SaxRowRead implements ISaxRowRead {
@Override
public void parse(int index, List datas) {
+ try {
+ if (datas == null || datas.size() == 0) {
+ return;
+ }
+ //标题行跳过
+ if (index < params.getTitleRows()) {
+ return;
+ }
+ //表头行
+ if (index < params.getTitleRows() + params.getHeadRows()) {
+ addHeadData(datas);
+ } else {
+ addListData(datas);
+ }
+ } catch (Exception e) {
+ LOGGER.error(e.getMessage(), e);
+ throw new ExcelImportException(e.getMessage());
+ }
+ }
+
+ /**
+ * 集合元素处理
+ * @param datas
+ */
+ private void addListData(List datas) throws Exception {
+ // 判断是集合元素还是不是集合元素,如果是就继续加入这个集合,不是就创建新的对象
+ if ((datas.get(params.getKeyIndex()) == null || StringUtils.isEmpty(String.valueOf(datas
+ .get(params.getKeyIndex()).getValue()))) && object != null) {
+ for (ExcelCollectionParams param : excelCollection) {
+ addListContinue(object, param, datas, titlemap, targetId, params);
+ }
+ } else {
+ object = POIPublicUtil.createObject(pojoClass, targetId);
+ SaxReadCellEntity entity;
+ for (int i = 0, le = datas.size(); i < le; i++) {
+ entity = datas.get(i);
+ String titleString = (String) titlemap.get(i);
+ if (excelParams.containsKey(titleString)) {
+ saveFieldValue(params, object, entity, excelParams, titleString);
+ }
+ }
+ for (ExcelCollectionParams param : excelCollection) {
+ addListContinue(object, param, datas, titlemap, targetId, params);
+ }
+ list.add(object);
+ }
+
+ }
+ /***
+ * 向List里面继续添加元素
+ *
+ * @param exclusions
+ * @param object
+ * @param param
+ * @param datas
+ * @param titlemap
+ * @param targetId
+ * @param params
+ */
+ private void addListContinue(Object object, ExcelCollectionParams param,
+ List datas, Map titlemap,
+ String targetId, ImportParams params) throws Exception {
+ Collection collection = (Collection) POIPublicUtil.getMethod(param.getName(),
+ object.getClass()).invoke(object, new Object[] {});
+ Object entity = POIPublicUtil.createObject(param.getType(), targetId);
+ boolean isUsed = false;// 是否需要加上这个对象
+ for (int i = 0; i < datas.size(); i++) {
+ String titleString = (String) titlemap.get(i);
+ if (param.getExcelParams().containsKey(titleString)) {
+ saveFieldValue(params, entity, datas.get(i), param.getExcelParams(), titleString);
+ isUsed = true;
+ }
+ }
+ if (isUsed) {
+ collection.add(entity);
+ }
}
+ /**
+ * 设置值
+ * @param params
+ * @param object
+ * @param entity
+ * @param excelParams
+ * @param titleString
+ * @throws Exception
+ */
+ private void saveFieldValue(ImportParams params, Object object, SaxReadCellEntity entity,
+ Map excelParams, String titleString)
+ throws Exception {
+ Object value = cellValueServer.getValue(params.getDataHanlder(), object, entity,
+ excelParams, titleString);
+ setValues(excelParams.get(titleString), object, value);
+ }
+
+ /**
+ * put 表头数据
+ * @param datas
+ */
+ private void addHeadData(List datas) {
+ for (int i = 0; i < datas.size(); i++) {
+ if (StringUtils.isNotEmpty(String.valueOf(datas.get(i).getValue()))) {
+ titlemap.put(i, String.valueOf(datas.get(i).getValue()));
+ }
+ }
+ }
}
diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java
index 28e0dd3..599305f 100644
--- a/easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java
+++ b/easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java
@@ -317,7 +317,7 @@ public class POIPublicUtil {
* 返回流和图片类型
*@Author JueYue
*@date 2013-11-20
- *@param obj
+ *@param entity
*@return (byte[]) isAndType[0],(Integer)isAndType[1]
* @throws Exception
*/
@@ -395,9 +395,6 @@ public class POIPublicUtil {
* @param index
* @return
* @throws Exception
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- * @throws IllegalArgumentException
*/
@SuppressWarnings("rawtypes")
public static Object getValueDoWhile(Object object, String[] paramsArr, int index)
diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java
index 16cc101..f4b3359 100644
--- a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java
+++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtilTest.java
@@ -5,27 +5,31 @@ import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.jeecgframework.poi.entity.CourseEntity;
import org.jeecgframework.poi.entity.TestEntity;
+import org.jeecgframework.poi.entity.statistics.StatisticEntity;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.junit.Test;
public class ExcelImportUtilTest {
- //@Test
+ @Test
public void test() {
ImportParams params = new ImportParams();
- params.setTitleRows(2);
- params.setHeadRows(2);
- //params.setSheetNum(9);
- params.setNeedSave(true);
+ params.setTitleRows(1);
long start = new Date().getTime();
- List list = ExcelImportUtil.importExcel(new File("d:/tt.xlsx"),
- CourseEntity.class, params);
+ List list = ExcelImportUtil.importExcelBySax(new File("d:/tt.xlsx"),
+ StatisticEntity.class, params);
+// List list = ExcelImportUtil.importExcelBySax(new File("d:/tt.xlsx"),
+// StatisticEntity.class, params);
+ /*for (int i = 0; i < list.size(); i++) {
+ System.out.println(ReflectionToStringBuilder.toString(list.get(i)));
+ }*/
System.out.println(list.size() + "-----" + (new Date().getTime() - start));
}
- @Test
+ // @Test
public void test2() {
ImportParams params = new ImportParams();
params.setTitleRows(1);
diff --git a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportStatisticTest.java b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportStatisticTest.java
index 9f5d876..d095ab4 100644
--- a/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportStatisticTest.java
+++ b/easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportStatisticTest.java
@@ -21,7 +21,7 @@ public class ExcelExportStatisticTest {
public void test() throws Exception {
List list = new ArrayList();
- for (int i = 0; i < 20; i++) {
+ for (int i = 0; i < 20000; i++) {
StatisticEntity client = new StatisticEntity();
client.setName("index" + i);
client.setIntTest(1 + i);
@@ -32,8 +32,7 @@ public class ExcelExportStatisticTest {
list.add(client);
}
Date start = new Date();
- ExportParams params = new ExportParams("2412312", "测试", ExcelType.XSSF);
- params.setStyle(ExcelStyleType.COLOR.getClazz());
+ ExportParams params = new ExportParams("2412312", "测试",ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(params, StatisticEntity.class, list);
System.out.println(new Date().getTime() - start.getTime());
File savefile = new File("d:/");
diff --git a/pom.xml b/pom.xml
index f1c336f..e2b8caa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,9 +24,9 @@
2.0.7-SNAPSHOT
- 3.11
+ 3.9
+ 2.4.0
16.0.1
- 1.09
2.6
1.6.1
3.1.1.RELEASE
@@ -100,12 +100,18 @@
spring-core
${spring.version}
+
+ xerces
+ xerces
+ ${xerces.version}
+
javax.servlet
servlet-api
2.5
provided
+ true