@@ -55,17 +55,18 @@ import org.slf4j.LoggerFactory; | |||
@SuppressWarnings("unchecked") | |||
public abstract class ExcelExportBase extends ExportBase { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExportBase.class); | |||
private static final Logger LOGGER = LoggerFactory | |||
.getLogger(ExcelExportBase.class); | |||
private int currentIndex = 0; | |||
private int currentIndex = 0; | |||
protected ExcelType type = ExcelType.HSSF; | |||
protected ExcelType type = ExcelType.HSSF; | |||
private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); | |||
private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); | |||
private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); | |||
private IExcelExportStyler excelExportStyler; | |||
protected IExcelExportStyler excelExportStyler; | |||
/** | |||
* 创建 最主要的 Cells | |||
@@ -88,12 +89,12 @@ public abstract class ExcelExportBase extends ExportBase { | |||
if (entity.getList() != null) { | |||
Collection<?> list = getListCellValue(entity, t); | |||
int listC = 0; | |||
if(list!=null&&list.size()>0){ | |||
for (Object obj : list) { | |||
createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), sheet, | |||
workbook); | |||
listC++; | |||
} | |||
if (list != null && list.size() > 0) { | |||
for (Object obj : list) { | |||
createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), | |||
sheet, workbook); | |||
listC++; | |||
} | |||
} | |||
cellNum += entity.getList().size(); | |||
if (list != null && list.size() > maxHeight) { | |||
@@ -181,7 +182,8 @@ public abstract class ExcelExportBase extends ExportBase { | |||
} | |||
private int createIndexCell(Row row, int index, ExcelExportEntity excelExportEntity) { | |||
if (excelExportEntity.getName().equals("序号")&&excelExportEntity.getFormat()!=null&&excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { | |||
if (excelExportEntity.getName().equals("序号") && excelExportEntity.getFormat() != null | |||
&& excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { | |||
createStringCell(row, 0, currentIndex + "", | |||
index % 2 == 0 ? getStyles(false, null) : getStyles(true, null), null); | |||
currentIndex = currentIndex + 1; | |||
@@ -19,6 +19,7 @@ import org.apache.poi.ss.usermodel.BuiltinFormats; | |||
import org.apache.poi.ss.usermodel.CellStyle; | |||
import org.apache.poi.ss.usermodel.Workbook; | |||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||
import org.jeecgframework.poi.excel.entity.params.ExcelForEachParams; | |||
/** | |||
* 抽象接口提供两个公共方法 | |||
@@ -67,4 +68,9 @@ public abstract class AbstractExcelExportStyler implements IExcelExportStyler { | |||
return null; | |||
} | |||
@Override | |||
public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) { | |||
return null; | |||
} | |||
} |
@@ -17,6 +17,7 @@ package org.jeecgframework.poi.excel.export.styler; | |||
import org.apache.poi.ss.usermodel.CellStyle; | |||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||
import org.jeecgframework.poi.excel.entity.params.ExcelForEachParams; | |||
/** | |||
* Excel导出样式接口 | |||
@@ -47,4 +48,12 @@ public interface IExcelExportStyler { | |||
*/ | |||
public CellStyle getStyles(boolean noneStyler, ExcelExportEntity entity); | |||
/** | |||
* 模板使用的样式设置 | |||
* @param isSingle | |||
* @param excelForEachParams | |||
* @return | |||
*/ | |||
public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams); | |||
} |
@@ -28,6 +28,7 @@ import java.util.Set; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.poi.ss.usermodel.Cell; | |||
import org.apache.poi.ss.usermodel.CellStyle; | |||
import org.apache.poi.ss.usermodel.Drawing; | |||
import org.apache.poi.ss.usermodel.Row; | |||
import org.apache.poi.ss.usermodel.Sheet; | |||
@@ -62,7 +63,8 @@ import org.slf4j.LoggerFactory; | |||
*/ | |||
public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExportOfTemplateUtil.class); | |||
private static final Logger LOGGER = LoggerFactory | |||
.getLogger(ExcelExportOfTemplateUtil.class); | |||
/** | |||
* 缓存TEMP 的for each创建的cell ,跳过这个cell的模板语法查找,提高效率 | |||
@@ -416,11 +418,16 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
//所有的cell创建一遍 | |||
for (int i = 0; i < rowspan; i++) { | |||
for (int j = columnIndex, max = columnIndex + colspan; j < max; j++) { | |||
if (row.getCell(j) == null){ | |||
if (row.getCell(j) == null) { | |||
row.createCell(j); | |||
row.getCell(j).setCellStyle(row.getRowNum() % 2 == 0 ? getStyles(false, null) : getStyles(true, null)); | |||
CellStyle style = row.getRowNum() % 2 == 0 | |||
? getStyles(false, columns.get(columnIndex - j)) | |||
: getStyles(true, columns.get(columnIndex - j)); | |||
//返回的styler不为空时才使用,否则使用Excel设置的,更加推荐Excel设置的样式 | |||
if (style != null) | |||
row.getCell(j).setCellStyle(style); | |||
} | |||
} | |||
if (i < rowspan - 1) { | |||
row = row.getSheet().getRow(row.getRowNum() + 1); | |||
@@ -486,6 +493,10 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
} | |||
private CellStyle getStyles(boolean isSingle, ExcelForEachParams excelForEachParams) { | |||
return excelExportStyler.getTemplateStyles(isSingle, excelForEachParams); | |||
} | |||
/** | |||
* 设置合并单元格的样式 | |||
* @param row | |||
@@ -543,8 +554,8 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||
cellStringString = cell.getStringCellValue(); | |||
if (StringUtils.isBlank(cellStringString) && colspan + startIndex <= index) { | |||
throw new ExcelExportException("for each 当中存在空字符串,请检查模板"); | |||
} else | |||
if (StringUtils.isBlank(cellStringString) && colspan + startIndex > index) { | |||
} else if (StringUtils.isBlank(cellStringString) | |||
&& colspan + startIndex > index) { | |||
//读取是判断,跳过,数据为空,但是不是第一次读这一列,所以可以跳过 | |||
columns.add(new ExcelForEachParams(null, cell.getCellStyle(), (short) 0)); | |||
continue; | |||
@@ -128,7 +128,7 @@ public final class PoiFunctionUtil { | |||
return isGt(second, first); | |||
} else if ("==".endsWith(operator)) { | |||
if (first != null && second != null) { | |||
return first.equals(second); | |||
return eq(first, second); | |||
} | |||
return first == second; | |||
} else if ("!=".endsWith(operator)) { | |||
@@ -141,6 +141,27 @@ public final class PoiFunctionUtil { | |||
} | |||
} | |||
/** | |||
* 判断两个对象是不是相等 | |||
* @param first | |||
* @param second | |||
* @return | |||
*/ | |||
private static boolean eq(Object first, Object second) { | |||
//要求两个对象当中至少一个对象不是字符串才进行数字类型判断 | |||
if (!(first instanceof String) || !(second instanceof String)) { | |||
try { | |||
double f = Double.parseDouble(first.toString()); | |||
double s = Double.parseDouble(second.toString()); | |||
return f == s; | |||
} catch (NumberFormatException e) { | |||
//可能存在的错误,忽略继续进行 | |||
} | |||
} | |||
return first.equals(second); | |||
} | |||
/** | |||
* 前者是不是大于后者 | |||
* @param first | |||
@@ -158,5 +179,5 @@ public final class PoiFunctionUtil { | |||
double two = Double.valueOf(second.toString()); | |||
return one > two; | |||
} | |||
} |