瀏覽代碼

优化了一下代码,sort 的compare 改为类实现接口,getValue统一由public处理

4.1.3.A
jueyue 10 年之前
父節點
當前提交
2aac3862a1
共有 9 個文件被更改,包括 47 次插入75 次删除
  1. +2
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java
  2. +1
    -2
      easypoi-base/src/main/java/org/jeecgframework/poi/cache/WordCache.java
  3. +3
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java
  4. +0
    -16
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ComparatorExcelField.java
  5. +6
    -1
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java
  6. +2
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java
  7. +22
    -40
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java
  8. +3
    -2
      easypoi-base/src/main/java/org/jeecgframework/poi/exception/word/enmus/WordExportEnum.java
  9. +8
    -5
      easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java

+ 2
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java 查看文件

@@ -1,6 +1,5 @@
package org.jeecgframework.poi.cache; package org.jeecgframework.poi.cache;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -35,12 +34,12 @@ public final class ExcelCache {
return wb; return wb;
} catch (InvalidFormatException e) { } catch (InvalidFormatException e) {
LOGGER.error(e.getMessage(),e); LOGGER.error(e.getMessage(),e);
} catch (IOException e) {
} catch (Exception e) {
LOGGER.error(e.getMessage(),e); LOGGER.error(e.getMessage(),e);
} finally { } finally {
try { try {
is.close(); is.close();
} catch (IOException e) {
} catch (Exception e) {
LOGGER.error(e.getMessage(),e); LOGGER.error(e.getMessage(),e);
} }
} }


+ 1
- 2
easypoi-base/src/main/java/org/jeecgframework/poi/cache/WordCache.java 查看文件

@@ -1,6 +1,5 @@
package org.jeecgframework.poi.cache; package org.jeecgframework.poi.cache;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import org.jeecgframework.poi.cache.manager.POICacheManager; import org.jeecgframework.poi.cache.manager.POICacheManager;
@@ -29,7 +28,7 @@ public class WordCache {
} finally { } finally {
try { try {
is.close(); is.close();
} catch (IOException e) {
} catch (Exception e) {
LOGGER.error(e.getMessage(),e); LOGGER.error(e.getMessage(),e);
} }
} }


+ 3
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java 查看文件

@@ -35,7 +35,7 @@ public final class ExcelExportUtil {
public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass,
Collection<?> dataSet) { Collection<?> dataSet) {
Workbook workbook; Workbook workbook;
if (entity.getType().equals(ExcelType.HSSF)) {
if (ExcelType.HSSF.equals(entity.getType())) {
workbook = new HSSFWorkbook(); workbook = new HSSFWorkbook();
} else if (dataSet.size() < 1000) { } else if (dataSet.size() < 1000) {
workbook = new XSSFWorkbook(); workbook = new XSSFWorkbook();
@@ -58,7 +58,7 @@ public final class ExcelExportUtil {
public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList,
Collection<? extends Map<?, ?>> dataSet) { Collection<? extends Map<?, ?>> dataSet) {
Workbook workbook; Workbook workbook;
if (entity.getType().equals(ExcelType.HSSF)) {
if (ExcelType.HSSF.equals(entity.getType())) {
workbook = new HSSFWorkbook(); workbook = new HSSFWorkbook();
} else if (dataSet.size() < 1000) { } else if (dataSet.size() < 1000) {
workbook = new XSSFWorkbook(); workbook = new XSSFWorkbook();
@@ -79,7 +79,7 @@ public final class ExcelExportUtil {
*/ */
public static Workbook exportExcel(List<Map<String, Object>> list, String type) { public static Workbook exportExcel(List<Map<String, Object>> list, String type) {
Workbook workbook; Workbook workbook;
if (type.equals(ExcelType.HSSF)) {
if (ExcelType.HSSF.equals(type)) {
workbook = new HSSFWorkbook(); workbook = new HSSFWorkbook();
} else { } else {
workbook = new XSSFWorkbook(); workbook = new XSSFWorkbook();


+ 0
- 16
easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ComparatorExcelField.java 查看文件

@@ -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();
}
}

+ 6
- 1
easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java 查看文件

@@ -8,7 +8,7 @@ import java.util.List;
* @author JueYue * @author JueYue
* @version 1.0 2013年8月24日 * @version 1.0 2013年8月24日
*/ */
public class ExcelExportEntity extends ExcelBaseEntity {
public class ExcelExportEntity extends ExcelBaseEntity implements Comparable<ExcelExportEntity> {
/** /**
* 如果是MAP导出,这个是map的key * 如果是MAP导出,这个是map的key
@@ -172,4 +172,9 @@ public class ExcelExportEntity extends ExcelBaseEntity {
this.isStatistics = isStatistics; this.isStatistics = isStatistics;
} }
@Override
public int compareTo(ExcelExportEntity prev) {
return this.getOrderNum() - prev.getOrderNum();
}
} }

+ 2
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java 查看文件

@@ -15,7 +15,6 @@ import org.apache.commons.lang.StringUtils;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection; import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.jeecgframework.poi.excel.annotation.ExcelEntity; 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.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.handler.inter.IExcelDataHandler; import org.jeecgframework.poi.handler.inter.IExcelDataHandler;
import org.jeecgframework.poi.util.POIPublicUtil; import org.jeecgframework.poi.util.POIPublicUtil;
@@ -296,10 +295,10 @@ public class ExportBase {
* 对字段根据用户设置排序 * 对字段根据用户设置排序
*/ */
public void sortAllParams(List<ExcelExportEntity> excelParams) { public void sortAllParams(List<ExcelExportEntity> excelParams) {
Collections.sort(excelParams, new ComparatorExcelField());
Collections.sort(excelParams);
for (ExcelExportEntity entity : excelParams) { for (ExcelExportEntity entity : excelParams) {
if (entity.getList() != null) { if (entity.getList() != null) {
Collections.sort(entity.getList(), new ComparatorExcelField());
Collections.sort(entity.getList());
} }
} }
} }


+ 22
- 40
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java 查看文件

@@ -42,6 +42,9 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
private static final Logger LOGGER = LoggerFactory private static final Logger LOGGER = LoggerFactory
.getLogger(ExcelExportOfTemplateUtil.class); .getLogger(ExcelExportOfTemplateUtil.class);
private static final String START_STR = "{{";
private static final String END_STR = "}}";
/** /**
* 缓存temp 的for each创建的cell ,跳过这个cell的模板语法查找,提高效率 * 缓存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 { private String getParamsValue(String params, Map<String, Object> map) throws Exception {
if (params.indexOf(".") != -1) { if (params.indexOf(".") != -1) {
String[] paramsArr = params.split("\\."); 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() : ""; 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 { private void parseTemplate(Sheet sheet, Map<String, Object> map) throws Exception {
Row row = null; Row row = null;
int index = 0; int index = 0;
@@ -274,14 +251,17 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
try {// step 1. 判断这个cell里面是不是函数 try {// step 1. 判断这个cell里面是不是函数
oldString = cell.getStringCellValue(); oldString = cell.getStringCellValue();
} catch (Exception e) { } catch (Exception e) {
LOGGER.error(e.getMessage(), e);
return; return;
} }
if (oldString != null && oldString.indexOf("{{") != -1 && !oldString.contains("foreach||")) {
if (oldString != null && oldString.indexOf(START_STR) != -1
&& !oldString.contains("foreach||")) {
// setp 2. 判断是否含有解析函数 // setp 2. 判断是否含有解析函数
String params; 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)); getParamsValue(params.trim(), map));
} }
cell.setCellValue(oldString); cell.setCellValue(oldString);
@@ -305,7 +285,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
throws Exception { throws Exception {
boolean isCreate = !name.startsWith("!"); boolean isCreate = !name.startsWith("!");
Collection<?> datas = (Collection<?>) map.get(name.substring(name.indexOf("||") + 2, Collection<?> datas = (Collection<?>) map.get(name.substring(name.indexOf("||") + 2,
name.indexOf("{{")));
name.indexOf(START_STR)));
List<String> columns = getAllDataColumns(cell, name); List<String> columns = getAllDataColumns(cell, name);
if (datas == null) { if (datas == null) {
return; return;
@@ -339,7 +319,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
row.createCell(i); row.createCell(i);
} }
for (int i = 0, max = columns.size(); i < max; 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); row.getCell(i + columnIndex).setCellValue(val);
tempCreateCellSet.add(row.getRowNum() + "_" + (i + columnIndex)); tempCreateCellSet.add(row.getRowNum() + "_" + (i + columnIndex));
} }
@@ -354,12 +335,12 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
*/ */
private List<String> getAllDataColumns(Cell cell, String name) { private List<String> getAllDataColumns(Cell cell, String name) {
List<String> columns = new ArrayList<String>(); 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(""); cell.setCellValue("");
return columns; return columns;
} }
columns.add(name.substring(name.indexOf("{{") + 2).trim());
columns.add(name.substring(name.indexOf(START_STR) + 2).trim());
int index = cell.getColumnIndex(); int index = cell.getColumnIndex();
Cell tempCell; Cell tempCell;
while (true) { while (true) {
@@ -368,14 +349,15 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
try {//不允许为空 try {//不允许为空
cellStringString = tempCell.getStringCellValue(); cellStringString = tempCell.getStringCellValue();
if (StringUtils.isBlank(cellStringString)) { if (StringUtils.isBlank(cellStringString)) {
throw new RuntimeException();
throw new ExcelExportException();
} }
} catch (Exception e) { } catch (Exception e) {
throw new ExcelExportException("for each 当中存在空字符串,请检查模板"); throw new ExcelExportException("for each 当中存在空字符串,请检查模板");
} }
//把读取过的cell 置为空
cell.setCellValue(""); cell.setCellValue("");
if (cellStringString.contains("}}")) {
columns.add(cellStringString.trim().replace("}}", ""));
if (cellStringString.contains(END_STR)) {
columns.add(cellStringString.trim().replace(END_STR, ""));
break; break;
} else { } else {
columns.add(cellStringString.trim()); columns.add(cellStringString.trim());


+ 3
- 2
easypoi-base/src/main/java/org/jeecgframework/poi/exception/word/enmus/WordExportEnum.java 查看文件

@@ -8,8 +8,9 @@ package org.jeecgframework.poi.exception.word.enmus;
*/ */
public enum WordExportEnum { 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; private String msg;


+ 8
- 5
easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java 查看文件

@@ -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.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity; import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; 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() { private POIPublicUtil() {
@@ -168,7 +172,7 @@ public class POIPublicUtil {
public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook) { public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook) {
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
List<HSSFPictureData> pictures = workbook.getAllPictures(); List<HSSFPictureData> pictures = workbook.getAllPictures();
if (pictures.size() != 0) {
if (!pictures.isEmpty()) {
for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
if (shape instanceof HSSFPicture) { if (shape instanceof HSSFPicture) {
@@ -412,8 +416,7 @@ public class POIPublicUtil {
if (object instanceof Map) { if (object instanceof Map) {
object = ((Map) object).get(paramsArr[index]); object = ((Map) object).get(paramsArr[index]);
} else { } 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( return (index == paramsArr.length - 1) ? (object == null ? "" : object) : getValueDoWhile(
object, paramsArr, ++index); object, paramsArr, ++index);


Loading…
取消
儲存