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