diff --git a/easypoi-base/pom.xml b/easypoi-base/pom.xml
index 815bcce..8eee58a 100644
--- a/easypoi-base/pom.xml
+++ b/easypoi-base/pom.xml
@@ -70,6 +70,11 @@
commons-lang3
+
+ ognl
+ ognl
+
+
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java
index 55797c4..3d57283 100644
--- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java
@@ -17,6 +17,7 @@ package cn.afterturn.easypoi.excel.entity;
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
+import cn.afterturn.easypoi.handler.inter.IExcelI18nHandler;
/**
* 基础参数
@@ -35,6 +36,10 @@ public class ExcelBaseParams {
* 字段处理类
*/
private IExcelDictHandler dictHandler;
+ /**
+ * 国际化处理类
+ */
+ private IExcelI18nHandler i18nHandler;
public IExcelDataHandler getDataHandler() {
return dataHandler;
@@ -51,4 +56,12 @@ public class ExcelBaseParams {
public void setDictHandler(IExcelDictHandler dictHandler) {
this.dictHandler = dictHandler;
}
+
+ public IExcelI18nHandler getI18nHandler() {
+ return i18nHandler;
+ }
+
+ public void setI18nHandler(IExcelI18nHandler i18nHandler) {
+ this.i18nHandler = i18nHandler;
+ }
}
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java
index bbb85f5..0b19a9a 100644
--- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java
@@ -154,6 +154,7 @@ public class ExcelExportService extends BaseExportService {
needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields());
}
dictHandler = entity.getDictHandler();
+ i18nHandler = entity.getI18nHandler();
// 创建表格样式
setExcelExportStyler((IExcelExportStyler) entity.getStyle()
.getConstructor(Workbook.class).newInstance(workbook));
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java
index dc23e4f..fc3f418 100644
--- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java
@@ -31,6 +31,7 @@ import java.util.List;
import java.util.Map;
import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
+import cn.afterturn.easypoi.handler.inter.IExcelI18nHandler;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.math.NumberUtils;
@@ -61,6 +62,7 @@ public class ExportCommonService {
protected IExcelDataHandler dataHandler;
protected IExcelDictHandler dictHandler;
+ protected IExcelI18nHandler i18nHandler;
protected List needHandlerList;
@@ -152,6 +154,9 @@ public class ExportCommonService {
PoiPublicUtil.getClassFields(clz), list, clz, null, null);
excelEntity = new ExcelExportEntity();
excelEntity.setName(PoiPublicUtil.getValueByTargetId(excel.name(), targetId, null));
+ if (i18nHandler == null) {
+ excelEntity.setName(i18nHandler.getLocaleName(excelEntity.getName()));
+ }
excelEntity.setOrderNum(Integer
.valueOf(PoiPublicUtil.getValueByTargetId(excel.orderNum(), targetId, "0")));
excelEntity
@@ -258,6 +263,10 @@ public class ExportCommonService {
} else {
excelEntity.setGroupName(excel.groupName());
}
+ if (i18nHandler == null) {
+ excelEntity.setName(i18nHandler.getLocaleName(excelEntity.getName()));
+ excelEntity.setGroupName(i18nHandler.getLocaleName(excelEntity.getGroupName()));
+ }
}
/**
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java
index 8a52d78..4e44907 100644
--- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java
@@ -107,12 +107,18 @@ public class MergedRegionHelper {
String[] temp = key.split("_");
if (Integer.parseInt(temp[0]) >= rowIndex) {
Integer[] data = mergedCache.get(key);
- mergedCache.put((Integer.parseInt(temp[0]) + size) + "_" + temp[1], mergedCache.get(key));
- // 还原合并单元格
- sheet.addMergedRegion(new CellRangeAddress(
- Integer.parseInt(temp[0]) + size - 1, Integer.parseInt(temp[0]) + data[0] + size - 2,
- Integer.parseInt(temp[1]), Integer.parseInt(temp[1]) + data[1] - 1
- ));
+ String newKey = (Integer.parseInt(temp[0]) + size) + "_" + temp[1];
+ if(!mergedCache.containsKey(newKey)){
+ mergedCache.put(newKey, mergedCache.get(key));
+ try {
+ // 还原合并单元格
+ sheet.addMergedRegion(new CellRangeAddress(
+ Integer.parseInt(temp[0]) + size - 1, Integer.parseInt(temp[0]) + data[0] + size - 2,
+ Integer.parseInt(temp[1]), Integer.parseInt(temp[1]) + data[1] - 1
+ ));
+ } catch (Exception e) {
+ }
+ }
}
}
}
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java
index 4d9e728..d386e2a 100644
--- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java
@@ -111,7 +111,8 @@ public class ExcelImportService extends ImportBaseService {
((IExcelDataModel) entity).setRowNum(row.getRowNum());
}
String picId;
- boolean isUsed = false;// 是否需要加上这个对象
+ // 是否需要加上这个对象
+ boolean isUsed = false;
for (int i = row.getFirstCellNum(); i < titlemap.size(); i++) {
Cell cell = row.getCell(i);
String titleString = (String) titlemap.get(i);
@@ -164,6 +165,7 @@ public class ExcelImportService extends ImportBaseService {
Map excelParams = new HashMap();
List excelCollection = new ArrayList();
String targetId = null;
+ i18nHandler = params.getI18nHandler();
if (!Map.class.equals(pojoClass)) {
Field[] fileds = PoiPublicUtil.getClassFields(pojoClass);
ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
@@ -380,73 +382,81 @@ public class ExcelImportService extends ImportBaseService {
}
List result = new ArrayList();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len;
- while ((len = inputstream.read(buffer)) > -1) {
- baos.write(buffer, 0, len);
- }
- baos.flush();
-
- InputStream userIs = new ByteArrayInputStream(baos.toByteArray());
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Excel clone success");
- }
- Workbook book = WorkbookFactory.create(userIs);
-
- boolean isXSSFWorkbook = !(book instanceof HSSFWorkbook);
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Workbook create success");
- }
- ExcelImportResult importResult = new ExcelImportResult();
- createErrorCellStyle(book);
- Map pictures;
- for (int i = params.getStartSheetIndex(); i < params.getStartSheetIndex()
- + params.getSheetNum(); i++) {
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug(" start to read excel by is ,startTime is {}", System.currentTimeMillis());
- }
- if (isXSSFWorkbook) {
- pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i),
- (XSSFWorkbook) book);
- } else {
- pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i),
- (HSSFWorkbook) book);
+ ExcelImportResult importResult;
+ try {
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = inputstream.read(buffer)) > -1) {
+ baos.write(buffer, 0, len);
}
+ baos.flush();
+
+ InputStream userIs = new ByteArrayInputStream(baos.toByteArray());
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug(" end to read excel by is ,endTime is {}", System.currentTimeMillis());
+ LOGGER.debug("Excel clone success");
}
- result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures));
+ Workbook book = WorkbookFactory.create(userIs);
+
+ boolean isXSSFWorkbook = !(book instanceof HSSFWorkbook);
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug(" end to read excel list by sheet ,endTime is {}", System.currentTimeMillis());
+ LOGGER.debug("Workbook create success");
}
- if (params.isReadSingleCell()) {
- readSingleCell(importResult, book.getSheetAt(i), params);
+ importResult = new ExcelImportResult();
+ createErrorCellStyle(book);
+ Map pictures;
+ for (int i = params.getStartSheetIndex(); i < params.getStartSheetIndex()
+ + params.getSheetNum(); i++) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug(" read Key-Value ,endTime is {}", System.currentTimeMillis());
+ LOGGER.debug(" start to read excel by is ,startTime is {}", System.currentTimeMillis());
+ }
+ if (isXSSFWorkbook) {
+ pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i),
+ (XSSFWorkbook) book);
+ } else {
+ pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i),
+ (HSSFWorkbook) book);
+ }
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug(" end to read excel by is ,endTime is {}", System.currentTimeMillis());
+ }
+ result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures));
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug(" end to read excel list by sheet ,endTime is {}", System.currentTimeMillis());
+ }
+ if (params.isReadSingleCell()) {
+ readSingleCell(importResult, book.getSheetAt(i), params);
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug(" read Key-Value ,endTime is {}", System.currentTimeMillis());
+ }
}
}
+ if (params.isNeedSave()) {
+ saveThisExcel(params, pojoClass, isXSSFWorkbook, book);
+ }
+ importResult.setList(result);
+ if (needMore) {
+ InputStream successIs = new ByteArrayInputStream(baos.toByteArray());
+ try {
+ Workbook successBook = WorkbookFactory.create(successIs);
+ importResult.setWorkbook(removeSuperfluousRows(successBook, failRow, params));
+ importResult.setFailWorkbook(removeSuperfluousRows(book, successRow, params));
+ importResult.setFailList(failCollection);
+ importResult.setVerfiyFail(verfiyFail);
+ } finally {
+ successIs.close();
+ }
+ }
+ } finally {
+ IOUtils.closeQuietly(baos);
}
- if (params.isNeedSave()) {
- saveThisExcel(params, pojoClass, isXSSFWorkbook, book);
- }
- importResult.setList(result);
- if (needMore) {
- InputStream successIs = new ByteArrayInputStream(baos.toByteArray());
- Workbook successBook = WorkbookFactory.create(successIs);
- importResult.setWorkbook(removeSuperfluousRows(successBook, failRow, params));
- importResult.setFailWorkbook(removeSuperfluousRows(book, successRow, params));
- importResult.setFailList(failCollection);
- importResult.setVerfiyFail(verfiyFail);
- successIs.close();
- }
- baos.close();
+
return importResult;
}
private Workbook removeSuperfluousRows(Workbook book, List rowList, ImportParams params) {
for (int i = params.getStartSheetIndex(); i < params.getStartSheetIndex()
+ params.getSheetNum(); i++) {
- for (int j = 0; j < rowList.size(); j++) {
+ for (int j = rowList.size() - 1; j >= 0; j--) {
if (rowList.get(j).getRowNum() < rowList.get(j).getSheet().getLastRowNum()) {
book.getSheetAt(i).shiftRows(rowList.get(j).getRowNum() + 1, rowList.get(j).getSheet().getLastRowNum(), -1);
} else if (rowList.get(j).getRowNum() == rowList.get(j).getSheet().getLastRowNum()) {
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java
index 4b7078c..2173a8f 100644
--- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import cn.afterturn.easypoi.handler.inter.IExcelI18nHandler;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.poi.ss.usermodel.Workbook;
@@ -52,6 +53,9 @@ import cn.afterturn.easypoi.util.PoiReflectorUtil;
*/
public class ImportBaseService {
+ protected IExcelI18nHandler i18nHandler;
+
+
/**
* 把这个注解解析放到类型对象中
*
@@ -84,6 +88,9 @@ public class ImportBaseService {
if(excelEntityAnn != null && excelEntityAnn.show()){
excelEntity.setName(excelEntityAnn.name() + "_" + excelEntity.getName());
}
+ if (i18nHandler == null) {
+ excelEntity.setName(i18nHandler.getLocaleName(excelEntity.getName()));
+ }
excelEntity.setMethod(PoiReflectorUtil.fromCache(pojoClass).getSetMethod(field.getName()));
if (StringUtils.isNotEmpty(excel.importFormat())) {
excelEntity.setFormat(excel.importFormat());
diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelI18nHandler.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelI18nHandler.java
new file mode 100644
index 0000000..ce449ca
--- /dev/null
+++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelI18nHandler.java
@@ -0,0 +1,17 @@
+package cn.afterturn.easypoi.handler.inter;
+
+/**
+ * @author jueyue on 18-2-2.
+ * @version 3.0.4
+ */
+public interface IExcelI18nHandler {
+
+ /**
+ * 获取当前名称
+ *
+ * @param name 注解配置的
+ * @return 返回国际化的名字
+ */
+ public String getLocaleName(String name);
+
+}
diff --git a/pom.xml b/pom.xml
index 952dae7..0fa35f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -180,6 +180,13 @@
1.8.3
+
+
+ ognl
+ ognl
+ 3.2.6
+
+
cn.afterturn