ソースを参照

提供国际化接口,和$fe插入后的还原

4.1.3.A
jueyue 6年前
コミット
5148d42856
9個のファイルの変更134行の追加59行の削除
  1. +5
    -0
      easypoi-base/pom.xml
  2. +13
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java
  3. +1
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java
  4. +9
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java
  5. +12
    -6
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/MergedRegionHelper.java
  6. +63
    -53
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java
  7. +7
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java
  8. +17
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelI18nHandler.java
  9. +7
    -0
      pom.xml

+ 5
- 0
easypoi-base/pom.xml ファイルの表示

@@ -70,6 +70,11 @@
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
</dependency>
<!--日志 -->
<!-- slf4j -->
<dependency>


+ 13
- 0
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;
}
}

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


+ 9
- 0
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<String> 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()));
}
}

/**


+ 12
- 6
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) {
}
}
}
}
}


+ 63
- 53
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<String, ExcelImportEntity> excelParams = new HashMap<String, ExcelImportEntity>();
List<ExcelCollectionParams> excelCollection = new ArrayList<ExcelCollectionParams>();
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<T> result = new ArrayList<T>();
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<String, PictureData> 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<String, PictureData> 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<Row> 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()) {


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


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

}

+ 7
- 0
pom.xml ファイルの表示

@@ -180,6 +180,13 @@
<version>1.8.3</version>
</dependency>
<!-- 表达式处理 -->
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.2.6</version>
</dependency>
<!-- 模块版本 -->
<dependency>
<groupId>cn.afterturn</groupId>


読み込み中…
キャンセル
保存