| @@ -1,6 +1,5 @@ | |||
| package org.jeecgframework.poi.cache; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import org.apache.poi.openxml4j.exceptions.InvalidFormatException; | |||
| @@ -35,12 +34,12 @@ public final class ExcelCache { | |||
| return wb; | |||
| } catch (InvalidFormatException e) { | |||
| LOGGER.error(e.getMessage(),e); | |||
| } catch (IOException e) { | |||
| } catch (Exception e) { | |||
| LOGGER.error(e.getMessage(),e); | |||
| } finally { | |||
| try { | |||
| is.close(); | |||
| } catch (IOException e) { | |||
| } catch (Exception e) { | |||
| LOGGER.error(e.getMessage(),e); | |||
| } | |||
| } | |||
| @@ -1,6 +1,5 @@ | |||
| package org.jeecgframework.poi.cache; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import org.jeecgframework.poi.cache.manager.POICacheManager; | |||
| @@ -29,7 +28,7 @@ public class WordCache { | |||
| } finally { | |||
| try { | |||
| is.close(); | |||
| } catch (IOException e) { | |||
| } catch (Exception e) { | |||
| LOGGER.error(e.getMessage(),e); | |||
| } | |||
| } | |||
| @@ -35,7 +35,7 @@ public final class ExcelExportUtil { | |||
| public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, | |||
| Collection<?> dataSet) { | |||
| Workbook workbook; | |||
| if (entity.getType().equals(ExcelType.HSSF)) { | |||
| if (ExcelType.HSSF.equals(entity.getType())) { | |||
| workbook = new HSSFWorkbook(); | |||
| } else if (dataSet.size() < 1000) { | |||
| workbook = new XSSFWorkbook(); | |||
| @@ -58,7 +58,7 @@ public final class ExcelExportUtil { | |||
| public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, | |||
| Collection<? extends Map<?, ?>> dataSet) { | |||
| Workbook workbook; | |||
| if (entity.getType().equals(ExcelType.HSSF)) { | |||
| if (ExcelType.HSSF.equals(entity.getType())) { | |||
| workbook = new HSSFWorkbook(); | |||
| } else if (dataSet.size() < 1000) { | |||
| workbook = new XSSFWorkbook(); | |||
| @@ -79,7 +79,7 @@ public final class ExcelExportUtil { | |||
| */ | |||
| public static Workbook exportExcel(List<Map<String, Object>> list, String type) { | |||
| Workbook workbook; | |||
| if (type.equals(ExcelType.HSSF)) { | |||
| if (ExcelType.HSSF.equals(type)) { | |||
| workbook = new HSSFWorkbook(); | |||
| } else { | |||
| workbook = new XSSFWorkbook(); | |||
| @@ -1,16 +0,0 @@ | |||
| package org.jeecgframework.poi.excel.entity.params; | |||
| import java.util.Comparator; | |||
| /** | |||
| * 按照升序排序 | |||
| * @author JueYue | |||
| * | |||
| */ | |||
| public class ComparatorExcelField implements Comparator<ExcelExportEntity> { | |||
| public int compare(ExcelExportEntity prev, ExcelExportEntity next) { | |||
| return prev.getOrderNum() - next.getOrderNum(); | |||
| } | |||
| } | |||
| @@ -8,7 +8,7 @@ import java.util.List; | |||
| * @author JueYue | |||
| * @version 1.0 2013年8月24日 | |||
| */ | |||
| public class ExcelExportEntity extends ExcelBaseEntity { | |||
| public class ExcelExportEntity extends ExcelBaseEntity implements Comparable<ExcelExportEntity> { | |||
| /** | |||
| * 如果是MAP导出,这个是map的key | |||
| @@ -172,4 +172,9 @@ public class ExcelExportEntity extends ExcelBaseEntity { | |||
| this.isStatistics = isStatistics; | |||
| } | |||
| @Override | |||
| public int compareTo(ExcelExportEntity prev) { | |||
| return this.getOrderNum() - prev.getOrderNum(); | |||
| } | |||
| } | |||
| @@ -15,7 +15,6 @@ 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; | |||
| @@ -296,10 +295,10 @@ public class ExportBase { | |||
| * 对字段根据用户设置排序 | |||
| */ | |||
| public void sortAllParams(List<ExcelExportEntity> excelParams) { | |||
| Collections.sort(excelParams, new ComparatorExcelField()); | |||
| Collections.sort(excelParams); | |||
| for (ExcelExportEntity entity : excelParams) { | |||
| if (entity.getList() != null) { | |||
| Collections.sort(entity.getList(), new ComparatorExcelField()); | |||
| Collections.sort(entity.getList()); | |||
| } | |||
| } | |||
| } | |||
| @@ -42,6 +42,9 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| private static final Logger LOGGER = LoggerFactory | |||
| .getLogger(ExcelExportOfTemplateUtil.class); | |||
| private static final String START_STR = "{{"; | |||
| private static final String END_STR = "}}"; | |||
| /** | |||
| * 缓存temp 的for each创建的cell ,跳过这个cell的模板语法查找,提高效率 | |||
| */ | |||
| @@ -188,7 +191,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| private String getParamsValue(String params, Map<String, Object> map) throws Exception { | |||
| if (params.indexOf(".") != -1) { | |||
| String[] paramsArr = params.split("\\."); | |||
| return getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1); | |||
| return String | |||
| .valueOf(POIPublicUtil.getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1)); | |||
| } | |||
| return map.containsKey(params) ? map.get(params).toString() : ""; | |||
| } | |||
| @@ -221,33 +225,6 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| } | |||
| /** | |||
| * 通过遍历过去对象值 | |||
| * | |||
| * @param object | |||
| * @param paramsArr | |||
| * @param index | |||
| * @return | |||
| * @throws Exception | |||
| * @throws java.lang.reflect.InvocationTargetException | |||
| * @throws IllegalAccessException | |||
| * @throws IllegalArgumentException | |||
| */ | |||
| @SuppressWarnings("rawtypes") | |||
| private String getValueDoWhile(Object object, String[] paramsArr, int index) throws Exception { | |||
| if (object == null) { | |||
| return ""; | |||
| } | |||
| if (object instanceof Map) { | |||
| object = ((Map) object).get(paramsArr[index]); | |||
| } else { | |||
| object = POIPublicUtil.getMethod(paramsArr[index], object.getClass()).invoke(object, | |||
| new Object[] {}); | |||
| } | |||
| return (index == paramsArr.length - 1) ? (object == null ? "" : object.toString()) | |||
| : getValueDoWhile(object, paramsArr, ++index); | |||
| } | |||
| private void parseTemplate(Sheet sheet, Map<String, Object> map) throws Exception { | |||
| Row row = null; | |||
| int index = 0; | |||
| @@ -274,14 +251,17 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| try {// step 1. 判断这个cell里面是不是函数 | |||
| oldString = cell.getStringCellValue(); | |||
| } catch (Exception e) { | |||
| LOGGER.error(e.getMessage(), e); | |||
| return; | |||
| } | |||
| if (oldString != null && oldString.indexOf("{{") != -1 && !oldString.contains("foreach||")) { | |||
| if (oldString != null && oldString.indexOf(START_STR) != -1 | |||
| && !oldString.contains("foreach||")) { | |||
| // setp 2. 判断是否含有解析函数 | |||
| String params; | |||
| while (oldString.indexOf("{{") != -1) { | |||
| params = oldString.substring(oldString.indexOf("{{") + 2, oldString.indexOf("}}")); | |||
| oldString = oldString.replace("{{" + params + "}}", | |||
| while (oldString.indexOf(START_STR) != -1) { | |||
| params = oldString.substring(oldString.indexOf(START_STR) + 2, | |||
| oldString.indexOf(END_STR)); | |||
| oldString = oldString.replace(START_STR + params + END_STR, | |||
| getParamsValue(params.trim(), map)); | |||
| } | |||
| cell.setCellValue(oldString); | |||
| @@ -305,7 +285,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| throws Exception { | |||
| boolean isCreate = !name.startsWith("!"); | |||
| Collection<?> datas = (Collection<?>) map.get(name.substring(name.indexOf("||") + 2, | |||
| name.indexOf("{{"))); | |||
| name.indexOf(START_STR))); | |||
| List<String> columns = getAllDataColumns(cell, name); | |||
| if (datas == null) { | |||
| return; | |||
| @@ -339,7 +319,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| row.createCell(i); | |||
| } | |||
| for (int i = 0, max = columns.size(); i < max; i++) { | |||
| String val = getValueDoWhile(t, columns.get(i).split("\\."), 0); | |||
| String val = String.valueOf(POIPublicUtil.getValueDoWhile(t, columns.get(i) | |||
| .split("\\."), 0)); | |||
| row.getCell(i + columnIndex).setCellValue(val); | |||
| tempCreateCellSet.add(row.getRowNum() + "_" + (i + columnIndex)); | |||
| } | |||
| @@ -354,12 +335,12 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| */ | |||
| private List<String> getAllDataColumns(Cell cell, String name) { | |||
| List<String> columns = new ArrayList<String>(); | |||
| if (name.contains("}}")) { | |||
| columns.add(name.substring(name.indexOf("{{") + 2, name.indexOf("}}")).trim()); | |||
| if (name.contains(END_STR)) { | |||
| columns.add(name.substring(name.indexOf(START_STR) + 2, name.indexOf(END_STR)).trim()); | |||
| cell.setCellValue(""); | |||
| return columns; | |||
| } | |||
| columns.add(name.substring(name.indexOf("{{") + 2).trim()); | |||
| columns.add(name.substring(name.indexOf(START_STR) + 2).trim()); | |||
| int index = cell.getColumnIndex(); | |||
| Cell tempCell; | |||
| while (true) { | |||
| @@ -368,14 +349,15 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
| try {//不允许为空 | |||
| cellStringString = tempCell.getStringCellValue(); | |||
| if (StringUtils.isBlank(cellStringString)) { | |||
| throw new RuntimeException(); | |||
| throw new ExcelExportException(); | |||
| } | |||
| } catch (Exception e) { | |||
| throw new ExcelExportException("for each 当中存在空字符串,请检查模板"); | |||
| } | |||
| //把读取过的cell 置为空 | |||
| cell.setCellValue(""); | |||
| if (cellStringString.contains("}}")) { | |||
| columns.add(cellStringString.trim().replace("}}", "")); | |||
| if (cellStringString.contains(END_STR)) { | |||
| columns.add(cellStringString.trim().replace(END_STR, "")); | |||
| break; | |||
| } else { | |||
| columns.add(cellStringString.trim()); | |||
| @@ -8,8 +8,9 @@ package org.jeecgframework.poi.exception.word.enmus; | |||
| */ | |||
| public enum WordExportEnum { | |||
| EXCEL_PARAMS_ERROR("Excel 导出 参数错误"), EXCEL_HEAD_HAVA_NULL("Excel 表头 有的字段为空"), EXCEL_NO_HEAD( | |||
| "Excel 没有表头"); | |||
| EXCEL_PARAMS_ERROR ("Excel 导出 参数错误") , | |||
| EXCEL_HEAD_HAVA_NULL ("Excel 表头 有的字段为空") , | |||
| EXCEL_NO_HEAD ("Excel 没有表头"); | |||
| private String msg; | |||
| @@ -37,8 +37,12 @@ import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | |||
| import org.jeecgframework.poi.word.entity.WordImageEntity; | |||
| import org.jeecgframework.poi.word.entity.params.ExcelListEntity; | |||
| import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; | |||
| public class POIPublicUtil { | |||
| /** | |||
| * EASYPOI 的公共基础类 | |||
| * @author JueYue | |||
| * @date 2015年4月5日 上午12:59:22 | |||
| */ | |||
| public final class POIPublicUtil { | |||
| private POIPublicUtil() { | |||
| @@ -168,7 +172,7 @@ public class POIPublicUtil { | |||
| public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook) { | |||
| Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); | |||
| List<HSSFPictureData> pictures = workbook.getAllPictures(); | |||
| if (pictures.size() != 0) { | |||
| if (!pictures.isEmpty()) { | |||
| for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { | |||
| HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); | |||
| if (shape instanceof HSSFPicture) { | |||
| @@ -412,8 +416,7 @@ public class POIPublicUtil { | |||
| if (object instanceof Map) { | |||
| object = ((Map) object).get(paramsArr[index]); | |||
| } else { | |||
| object = POIPublicUtil.getMethod(paramsArr[index], object.getClass()).invoke(object, | |||
| new Object[] {}); | |||
| object = getMethod(paramsArr[index], object.getClass()).invoke(object, new Object[] {}); | |||
| } | |||
| return (index == paramsArr.length - 1) ? (object == null ? "" : object) : getValueDoWhile( | |||
| object, paramsArr, ++index); | |||