@@ -39,12 +39,12 @@ public class WordCache { | |||
MyXWPFDocument doc = new MyXWPFDocument(is); | |||
return doc; | |||
} catch (Exception e) { | |||
LOGGER.error(e.getMessage(),e); | |||
LOGGER.error(e.getMessage(), e); | |||
} finally { | |||
try { | |||
is.close(); | |||
} catch (Exception e) { | |||
LOGGER.error(e.getMessage(),e); | |||
LOGGER.error(e.getMessage(), e); | |||
} | |||
} | |||
return null; | |||
@@ -14,6 +14,7 @@ | |||
* limitations under the License. | |||
*/ | |||
package org.jeecgframework.poi.cache.manager; | |||
/** | |||
* 缓存读取 | |||
* @author JueYue | |||
@@ -94,8 +94,8 @@ public class ExcelImportUtil { | |||
* @throws Exception | |||
*/ | |||
public static <T> ExcelImportResult<T> importExcelVerify(InputStream inputstream, | |||
Class<?> pojoClass, ImportParams params) | |||
throws Exception { | |||
Class<?> pojoClass, | |||
ImportParams params) throws Exception { | |||
return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params); | |||
} | |||
@@ -89,11 +89,12 @@ public class ExportParams extends ExcelBaseParams { | |||
/** | |||
* 是否动态获取数据 | |||
*/ | |||
private boolean isDynamicData = false; | |||
private boolean isDynamicData = false; | |||
/** | |||
* 是否追加图形 | |||
*/ | |||
private boolean isAppendGraph = true; | |||
private boolean isAppendGraph = true; | |||
public ExportParams() { | |||
} | |||
@@ -227,24 +228,20 @@ public class ExportParams extends ExcelBaseParams { | |||
this.isCreateHeadRows = isCreateHeadRows; | |||
} | |||
public boolean isDynamicData() | |||
{ | |||
return isDynamicData; | |||
} | |||
public boolean isDynamicData() { | |||
return isDynamicData; | |||
} | |||
public void setDynamicData(boolean isDynamicData) | |||
{ | |||
this.isDynamicData = isDynamicData; | |||
} | |||
public void setDynamicData(boolean isDynamicData) { | |||
this.isDynamicData = isDynamicData; | |||
} | |||
public boolean isAppendGraph() | |||
{ | |||
return isAppendGraph; | |||
} | |||
public boolean isAppendGraph() { | |||
return isAppendGraph; | |||
} | |||
public void setAppendGraph(boolean isAppendGraph) | |||
{ | |||
this.isAppendGraph = isAppendGraph; | |||
} | |||
public void setAppendGraph(boolean isAppendGraph) { | |||
this.isAppendGraph = isAppendGraph; | |||
} | |||
} |
@@ -57,7 +57,7 @@ public class ImportParams extends ExcelBaseParams { | |||
/** | |||
* 是否需要校验上传的Excel,默认为false | |||
*/ | |||
private boolean needVerfiy = false; | |||
private boolean needVerfiy = false; | |||
/** | |||
* 保存上传的Excel目录,默认是 如 TestEntity这个类保存路径就是 | |||
* upload/excelUpload/Test/yyyyMMddHHmss_***** 保存名称上传时间_五位随机数 | |||
@@ -22,6 +22,6 @@ package org.jeecgframework.poi.excel.entity.enmus; | |||
*/ | |||
public enum CellValueType { | |||
String, Number, Boolean, Date, TElement, Null, None; | |||
String , Number , Boolean , Date , TElement , Null , None; | |||
} |
@@ -26,9 +26,9 @@ import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl; | |||
*/ | |||
public enum ExcelStyleType { | |||
NONE("默认样式", ExcelExportStylerDefaultImpl.class), | |||
BORDER("边框样式", ExcelExportStylerBorderImpl.class), | |||
COLOR("间隔行样式", ExcelExportStylerColorImpl.class); | |||
NONE ("默认样式" , ExcelExportStylerDefaultImpl.class) , | |||
BORDER ("边框样式" , ExcelExportStylerBorderImpl.class) , | |||
COLOR ("间隔行样式" , ExcelExportStylerColorImpl.class); | |||
private String name; | |||
private Class<?> clazz; | |||
@@ -21,7 +21,7 @@ package org.jeecgframework.poi.excel.entity.enmus; | |||
* @date 2014年12月29日 下午9:08:21 | |||
*/ | |||
public enum ExcelType { | |||
HSSF, XSSF; | |||
HSSF , XSSF; | |||
} |
@@ -191,28 +191,29 @@ public class ExcelExportEntity extends ExcelBaseEntity implements Comparable<Exc | |||
public int compareTo(ExcelExportEntity prev) { | |||
return this.getOrderNum() - prev.getOrderNum(); | |||
} | |||
@Override | |||
public int hashCode() | |||
{ | |||
final int prime = 31; | |||
int result = 1; | |||
result = prime * result + ((key == null) ? 0 : key.hashCode()); | |||
return result; | |||
} | |||
@Override | |||
public boolean equals(Object obj) | |||
{ | |||
if (this == obj) return true; | |||
if (obj == null) return false; | |||
if (getClass() != obj.getClass()) return false; | |||
ExcelExportEntity other = (ExcelExportEntity) obj; | |||
if (key == null) | |||
{ | |||
if (other.key != null) return false; | |||
} | |||
else if (!key.equals(other.key)) return false; | |||
return true; | |||
} | |||
public int hashCode() { | |||
final int prime = 31; | |||
int result = 1; | |||
result = prime * result + ((key == null) ? 0 : key.hashCode()); | |||
return result; | |||
} | |||
@Override | |||
public boolean equals(Object obj) { | |||
if (this == obj) | |||
return true; | |||
if (obj == null) | |||
return false; | |||
if (getClass() != obj.getClass()) | |||
return false; | |||
ExcelExportEntity other = (ExcelExportEntity) obj; | |||
if (key == null) { | |||
if (other.key != null) | |||
return false; | |||
} else if (!key.equals(other.key)) | |||
return false; | |||
return true; | |||
} | |||
} |
@@ -10,9 +10,8 @@ package org.jeecgframework.poi.excel.entity.vo; | |||
* @see org.jeecgframework.poi.excel.entity.vo.BaseEntityTypeConstants | |||
* | |||
*/ | |||
public interface BaseEntityTypeConstants | |||
{ | |||
public final static Integer StringType =1; | |||
public final static Integer DoubleType =10; | |||
public final static Integer ImageType = 3; | |||
public interface BaseEntityTypeConstants { | |||
public final static Integer StringType = 1; | |||
public final static Integer DoubleType = 10; | |||
public final static Integer ImageType = 3; | |||
} |
@@ -113,19 +113,17 @@ public abstract class ExcelExportBase extends ExportBase { | |||
row.getSheet().getWorkbook().getCreationHelper(), t, | |||
entity.getName(), value)); | |||
} | |||
} | |||
else if(entity.getType() == BaseEntityTypeConstants.DoubleType) | |||
{ | |||
createDoubleCell(row, cellNum++, value == null ? "" : value.toString(), | |||
index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | |||
entity); | |||
if (entity.isHyperlink()) { | |||
row.getCell(cellNum - 1) | |||
.setHyperlink(dataHanlder.getHyperlink( | |||
row.getSheet().getWorkbook().getCreationHelper(), t, | |||
entity.getName(), value)); | |||
} | |||
}else { | |||
} else if (entity.getType() == BaseEntityTypeConstants.DoubleType) { | |||
createDoubleCell(row, cellNum++, value == null ? "" : value.toString(), | |||
index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | |||
entity); | |||
if (entity.isHyperlink()) { | |||
row.getCell(cellNum - 1) | |||
.setHyperlink(dataHanlder.getHyperlink( | |||
row.getSheet().getWorkbook().getCreationHelper(), t, | |||
entity.getName(), value)); | |||
} | |||
} else { | |||
createImageCell(patriarch, entity, row, cellNum++, | |||
value == null ? "" : value.toString(), t); | |||
} | |||
@@ -232,19 +230,16 @@ public abstract class ExcelExportBase extends ExportBase { | |||
row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), | |||
value)); | |||
} | |||
} | |||
else if(entity.getType() == BaseEntityTypeConstants.DoubleType) | |||
{ | |||
createDoubleCell(row, cellNum++, value == null ? "" : value.toString(), | |||
index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | |||
entity); | |||
if (entity.isHyperlink()) { | |||
row.getCell(cellNum - 1) | |||
.setHyperlink(dataHanlder.getHyperlink( | |||
row.getSheet().getWorkbook().getCreationHelper(),obj, | |||
entity.getName(), value)); | |||
} | |||
}else { | |||
} else if (entity.getType() == BaseEntityTypeConstants.DoubleType) { | |||
createDoubleCell(row, cellNum++, value == null ? "" : value.toString(), | |||
index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); | |||
if (entity.isHyperlink()) { | |||
row.getCell(cellNum - 1) | |||
.setHyperlink(dataHanlder.getHyperlink( | |||
row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), | |||
value)); | |||
} | |||
} else { | |||
createImageCell(patriarch, entity, row, cellNum++, | |||
value == null ? "" : value.toString(), obj); | |||
} | |||
@@ -280,7 +275,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||
} | |||
addStatisticsData(index, text, entity); | |||
} | |||
/** | |||
* 创建数字类型的Cell | |||
* | |||
@@ -291,12 +286,12 @@ public abstract class ExcelExportBase extends ExportBase { | |||
* @param entity | |||
*/ | |||
public void createDoubleCell(Row row, int index, String text, CellStyle style, | |||
ExcelExportEntity entity) { | |||
ExcelExportEntity entity) { | |||
Cell cell = row.createCell(index); | |||
if(text!=null&&text.length()>0){ | |||
cell.setCellValue(Double.parseDouble(text)); | |||
}else{ | |||
cell.setCellValue(-1); | |||
if (text != null && text.length() > 0) { | |||
cell.setCellValue(Double.parseDouble(text)); | |||
} else { | |||
cell.setCellValue(-1); | |||
} | |||
cell.setCellType(Cell.CELL_TYPE_NUMERIC); | |||
if (style != null) { | |||
@@ -304,8 +299,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||
} | |||
addStatisticsData(index, text, entity); | |||
} | |||
/** | |||
* 创建统计行 | |||
* @param styles | |||
@@ -33,7 +33,7 @@ public abstract class AbstractExcelExportStyler implements IExcelExportStyler { | |||
//间隔行 | |||
protected CellStyle stringSeptailStyle; | |||
protected CellStyle stringSeptailWrapStyle; | |||
protected Workbook workbook; | |||
protected static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT"); | |||
@@ -24,8 +24,8 @@ import org.apache.poi.ss.usermodel.Workbook; | |||
* @author JueYue | |||
* @date 2015年1月9日 下午5:55:29 | |||
*/ | |||
public class ExcelExportStylerBorderImpl extends AbstractExcelExportStyler implements | |||
IExcelExportStyler { | |||
public class ExcelExportStylerBorderImpl extends AbstractExcelExportStyler | |||
implements IExcelExportStyler { | |||
public ExcelExportStylerBorderImpl(Workbook workbook) { | |||
super.createStyles(workbook); | |||
@@ -24,8 +24,8 @@ import org.apache.poi.ss.usermodel.Workbook; | |||
* @author JueYue | |||
* @date 2015年1月9日 下午4:54:15 | |||
*/ | |||
public class ExcelExportStylerColorImpl extends AbstractExcelExportStyler implements | |||
IExcelExportStyler { | |||
public class ExcelExportStylerColorImpl extends AbstractExcelExportStyler | |||
implements IExcelExportStyler { | |||
public ExcelExportStylerColorImpl(Workbook workbook) { | |||
super.createStyles(workbook); | |||
@@ -24,8 +24,8 @@ import org.apache.poi.ss.usermodel.Workbook; | |||
* @author JueYue | |||
* @date 2015年1月9日 下午5:36:08 | |||
*/ | |||
public class ExcelExportStylerDefaultImpl extends AbstractExcelExportStyler implements | |||
IExcelExportStyler { | |||
public class ExcelExportStylerDefaultImpl extends AbstractExcelExportStyler | |||
implements IExcelExportStyler { | |||
public ExcelExportStylerDefaultImpl(Workbook workbook) { | |||
super.createStyles(workbook); | |||
@@ -38,225 +38,219 @@ import com.google.common.collect.Lists; | |||
* @version 1.0 | |||
* | |||
*/ | |||
public class ExcelChartBuildService | |||
{ | |||
/** | |||
* | |||
* @param workbook | |||
* @param graph | |||
* @param build 通过实时数据行来重新计算图形定义 | |||
* @param append | |||
*/ | |||
public static void createExcelChart(Workbook workbook,List<ExcelGraph> graphList,Boolean build,Boolean append) | |||
{ | |||
if(workbook!=null&&graphList!=null){ | |||
//设定默认第一个sheet为数据项 | |||
Sheet dataSouce=workbook.getSheetAt(0); | |||
if(dataSouce!=null){ | |||
buildTitle(dataSouce,graphList); | |||
if(build){ | |||
PoiExcelGraphDataUtil.buildGraphData(dataSouce, graphList); | |||
} | |||
if(append){ | |||
buildExcelChart(dataSouce, dataSouce, graphList); | |||
}else{ | |||
Sheet sheet=workbook.createSheet("图形界面"); | |||
buildExcelChart(dataSouce, sheet, graphList); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 构建基础图形 | |||
* @param drawing | |||
* @param anchor | |||
* @param dataSourceSheet | |||
* @param graph | |||
*/ | |||
private static void buildExcelChart(Drawing drawing,ClientAnchor anchor,Sheet dataSourceSheet,ExcelGraph graph){ | |||
Chart chart = drawing.createChart(anchor); | |||
ChartLegend legend = chart.getOrCreateLegend(); | |||
legend.setPosition(LegendPosition.TOP_RIGHT); | |||
ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM); | |||
public class ExcelChartBuildService { | |||
/** | |||
* | |||
* @param workbook | |||
* @param graph | |||
* @param build 通过实时数据行来重新计算图形定义 | |||
* @param append | |||
*/ | |||
public static void createExcelChart(Workbook workbook, List<ExcelGraph> graphList, | |||
Boolean build, Boolean append) { | |||
if (workbook != null && graphList != null) { | |||
//设定默认第一个sheet为数据项 | |||
Sheet dataSouce = workbook.getSheetAt(0); | |||
if (dataSouce != null) { | |||
buildTitle(dataSouce, graphList); | |||
if (build) { | |||
PoiExcelGraphDataUtil.buildGraphData(dataSouce, graphList); | |||
} | |||
if (append) { | |||
buildExcelChart(dataSouce, dataSouce, graphList); | |||
} else { | |||
Sheet sheet = workbook.createSheet("图形界面"); | |||
buildExcelChart(dataSouce, sheet, graphList); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 构建基础图形 | |||
* @param drawing | |||
* @param anchor | |||
* @param dataSourceSheet | |||
* @param graph | |||
*/ | |||
private static void buildExcelChart(Drawing drawing, ClientAnchor anchor, Sheet dataSourceSheet, | |||
ExcelGraph graph) { | |||
Chart chart = drawing.createChart(anchor); | |||
ChartLegend legend = chart.getOrCreateLegend(); | |||
legend.setPosition(LegendPosition.TOP_RIGHT); | |||
ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM); | |||
ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT); | |||
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); | |||
ExcelGraphElement categoryElement=graph.getCategory(); | |||
ExcelGraphElement categoryElement = graph.getCategory(); | |||
ChartDataSource categoryChart; | |||
if(categoryElement!=null&&categoryElement.getElementType()==ExcelGraphElementType.StringType){ | |||
categoryChart=DataSources.fromStringCellRange(dataSourceSheet, new CellRangeAddress(categoryElement.getStartRowNum(),categoryElement.getEndRowNum(),categoryElement.getStartColNum(),categoryElement.getEndColNum())); | |||
}else{ | |||
categoryChart=DataSources.fromNumericCellRange(dataSourceSheet, new CellRangeAddress(categoryElement.getStartRowNum(),categoryElement.getEndRowNum(),categoryElement.getStartColNum(),categoryElement.getEndColNum())); | |||
if (categoryElement != null | |||
&& categoryElement.getElementType() == ExcelGraphElementType.STRING_TYPE) { | |||
categoryChart = DataSources.fromStringCellRange(dataSourceSheet, | |||
new CellRangeAddress(categoryElement.getStartRowNum(), | |||
categoryElement.getEndRowNum(), categoryElement.getStartColNum(), | |||
categoryElement.getEndColNum())); | |||
} else { | |||
categoryChart = DataSources.fromNumericCellRange(dataSourceSheet, | |||
new CellRangeAddress(categoryElement.getStartRowNum(), | |||
categoryElement.getEndRowNum(), categoryElement.getStartColNum(), | |||
categoryElement.getEndColNum())); | |||
} | |||
List<ExcelGraphElement> valueList = graph.getValueList(); | |||
List<ChartDataSource<Number>> chartValueList = Lists.newArrayList(); | |||
if (valueList != null && valueList.size() > 0) { | |||
for (ExcelGraphElement ele : valueList) { | |||
ChartDataSource<Number> source = DataSources.fromNumericCellRange(dataSourceSheet, | |||
new CellRangeAddress(ele.getStartRowNum(), ele.getEndRowNum(), | |||
ele.getStartColNum(), ele.getEndColNum())); | |||
chartValueList.add(source); | |||
} | |||
} | |||
if (graph.getGraphType() == ExcelGraphType.LINE_CHART) { | |||
LineChartData data = chart.getChartDataFactory().createLineChartData(); | |||
buildLineChartData(data, categoryChart, chartValueList, graph.getTitle()); | |||
chart.plot(data, bottomAxis, leftAxis); | |||
} else { | |||
ScatterChartData data = chart.getChartDataFactory().createScatterChartData(); | |||
buildScatterChartData(data, categoryChart, chartValueList, graph.getTitle()); | |||
chart.plot(data, bottomAxis, leftAxis); | |||
} | |||
} | |||
/** | |||
* 构建多个图形对象 | |||
* @param dataSourceSheet | |||
* @param tragetSheet | |||
* @param graphList | |||
*/ | |||
private static void buildExcelChart(Sheet dataSourceSheet, Sheet tragetSheet, | |||
List<ExcelGraph> graphList) { | |||
int len = graphList.size(); | |||
if (len == 1) { | |||
buildExcelChart(dataSourceSheet, tragetSheet, graphList.get(0)); | |||
} else { | |||
int drawStart = 0; | |||
int drawEnd = 20; | |||
Drawing drawing = tragetSheet.createDrawingPatriarch(); | |||
for (int i = 0; i < len; i++) { | |||
ExcelGraph graph = graphList.get(i); | |||
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, drawStart, 15, drawEnd); | |||
buildExcelChart(drawing, anchor, dataSourceSheet, graph); | |||
drawStart = drawStart + drawEnd; | |||
drawEnd = drawEnd + drawEnd; | |||
} | |||
} | |||
} | |||
/** | |||
* 构建图形对象 | |||
* @param workbook | |||
* @param dataSourceSheet | |||
* @param tragetSheet | |||
* @param graph | |||
*/ | |||
private static void buildExcelChart(Sheet dataSourceSheet, Sheet tragetSheet, | |||
ExcelGraph graph) { | |||
Drawing drawing = tragetSheet.createDrawingPatriarch(); | |||
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 0, 15, 20); | |||
buildExcelChart(drawing, anchor, dataSourceSheet, graph); | |||
} | |||
/** | |||
* 构建Title | |||
* @param sheet | |||
* @param graph | |||
*/ | |||
private static void buildTitle(Sheet sheet, ExcelGraph graph) { | |||
int cellTitleLen = graph.getTitleCell().size(); | |||
int titleLen = graph.getTitle().size(); | |||
if (titleLen > 0) { | |||
} else { | |||
for (int i = 0; i < cellTitleLen; i++) { | |||
ExcelTitleCell titleCell = graph.getTitleCell().get(i); | |||
if (titleCell != null) { | |||
graph.getTitle().add( | |||
PoiCellUtil.getCellValue(sheet, titleCell.getRow(), titleCell.getCol())); | |||
} | |||
} | |||
} | |||
List<ExcelGraphElement> valueList=graph.getValueList(); | |||
List<ChartDataSource<Number>> chartValueList=Lists.newArrayList(); | |||
if(valueList!=null&&valueList.size()>0){ | |||
for(ExcelGraphElement ele:valueList){ | |||
ChartDataSource<Number> source=DataSources.fromNumericCellRange(dataSourceSheet, new CellRangeAddress(ele.getStartRowNum(),ele.getEndRowNum(),ele.getStartColNum(),ele.getEndColNum())); | |||
chartValueList.add(source); | |||
} | |||
} | |||
/** | |||
* 构建Title | |||
* @param sheet | |||
* @param graphList | |||
*/ | |||
private static void buildTitle(Sheet sheet, List<ExcelGraph> graphList) { | |||
if (graphList != null && graphList.size() > 0) { | |||
for (ExcelGraph graph : graphList) { | |||
if (graph != null) { | |||
buildTitle(sheet, graph); | |||
} | |||
} | |||
} | |||
if(graph.getGraphType()==ExcelGraphType.LineChart){ | |||
LineChartData data = chart.getChartDataFactory().createLineChartData(); | |||
buildLineChartData(data, categoryChart, chartValueList, graph.getTitle()); | |||
chart.plot(data, bottomAxis, leftAxis); | |||
} | |||
else | |||
{ | |||
ScatterChartData data=chart.getChartDataFactory().createScatterChartData(); | |||
buildScatterChartData(data, categoryChart, chartValueList,graph.getTitle()); | |||
chart.plot(data, bottomAxis, leftAxis); | |||
} | |||
} | |||
/** | |||
* 构建多个图形对象 | |||
* @param dataSourceSheet | |||
* @param tragetSheet | |||
* @param graphList | |||
*/ | |||
private static void buildExcelChart(Sheet dataSourceSheet,Sheet tragetSheet,List<ExcelGraph> graphList){ | |||
int len=graphList.size(); | |||
if(len==1) | |||
{ | |||
buildExcelChart(dataSourceSheet, tragetSheet, graphList.get(0)); | |||
} | |||
else | |||
{ | |||
int drawStart=0; | |||
int drawEnd=20; | |||
Drawing drawing = tragetSheet.createDrawingPatriarch(); | |||
for(int i=0;i<len;i++){ | |||
ExcelGraph graph=graphList.get(i); | |||
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, drawStart, 15, drawEnd); | |||
buildExcelChart(drawing, anchor, dataSourceSheet, graph); | |||
drawStart=drawStart+drawEnd; | |||
drawEnd=drawEnd+drawEnd; | |||
} | |||
} | |||
} | |||
/** | |||
* 构建图形对象 | |||
* @param workbook | |||
* @param dataSourceSheet | |||
* @param tragetSheet | |||
* @param graph | |||
*/ | |||
private static void buildExcelChart(Sheet dataSourceSheet,Sheet tragetSheet,ExcelGraph graph){ | |||
Drawing drawing = tragetSheet.createDrawingPatriarch(); | |||
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 0, 15, 20); | |||
buildExcelChart(drawing, anchor, dataSourceSheet, graph); | |||
} | |||
/** | |||
* 构建Title | |||
* @param sheet | |||
* @param graph | |||
*/ | |||
private static void buildTitle(Sheet sheet,ExcelGraph graph){ | |||
int cellTitleLen=graph.getTitleCell().size(); | |||
int titleLen=graph.getTitle().size(); | |||
if(titleLen>0){ | |||
}else{ | |||
for(int i=0;i<cellTitleLen;i++){ | |||
ExcelTitleCell titleCell=graph.getTitleCell().get(i); | |||
if(titleCell!=null){ | |||
graph.getTitle().add(PoiCellUtil.getCellValue(sheet,titleCell.getRow(),titleCell.getCol())); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 构建Title | |||
* @param sheet | |||
* @param graphList | |||
*/ | |||
private static void buildTitle(Sheet sheet,List<ExcelGraph> graphList){ | |||
if(graphList!=null&&graphList.size()>0){ | |||
for(ExcelGraph graph:graphList){ | |||
if(graph!=null) | |||
{ | |||
buildTitle(sheet, graph); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* | |||
* @param data | |||
* @param categoryChart | |||
* @param chartValueList | |||
* @param title | |||
*/ | |||
private static void buildLineChartData(LineChartData data,ChartDataSource categoryChart,List<ChartDataSource<Number>> chartValueList,List<String> title){ | |||
if(chartValueList.size()==title.size()) | |||
{ | |||
int len=title.size(); | |||
for(int i=0;i<len;i++){ | |||
data.addSerie(categoryChart, chartValueList.get(i)).setTitle(title.get(i)); | |||
} | |||
} | |||
else | |||
{ | |||
int i=0; | |||
for(ChartDataSource<Number> source:chartValueList){ | |||
String _title=title.get(i); | |||
if(StringUtils.isNotBlank(_title)){ | |||
data.addSerie(categoryChart, source).setTitle(_title); | |||
}else{ | |||
data.addSerie(categoryChart, source); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* | |||
* @param data | |||
* @param categoryChart | |||
* @param chartValueList | |||
* @param title | |||
*/ | |||
private static void buildScatterChartData(ScatterChartData data,ChartDataSource categoryChart,List<ChartDataSource<Number>> chartValueList,List<String> title){ | |||
if(chartValueList.size()==title.size()) | |||
{ | |||
int len=title.size(); | |||
for(int i=0;i<len;i++){ | |||
data.addSerie(categoryChart, chartValueList.get(i)).setTitle(title.get(i)); | |||
} | |||
} | |||
else | |||
{ | |||
int i=0; | |||
for(ChartDataSource<Number> source:chartValueList){ | |||
String _title=title.get(i); | |||
if(StringUtils.isNotBlank(_title)){ | |||
data.addSerie(categoryChart, source).setTitle(_title); | |||
}else{ | |||
data.addSerie(categoryChart, source); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* | |||
* @param data | |||
* @param categoryChart | |||
* @param chartValueList | |||
* @param title | |||
*/ | |||
private static void buildLineChartData(LineChartData data, ChartDataSource categoryChart, | |||
List<ChartDataSource<Number>> chartValueList, | |||
List<String> title) { | |||
if (chartValueList.size() == title.size()) { | |||
int len = title.size(); | |||
for (int i = 0; i < len; i++) { | |||
data.addSerie(categoryChart, chartValueList.get(i)).setTitle(title.get(i)); | |||
} | |||
} else { | |||
int i = 0; | |||
for (ChartDataSource<Number> source : chartValueList) { | |||
String _title = title.get(i); | |||
if (StringUtils.isNotBlank(_title)) { | |||
data.addSerie(categoryChart, source).setTitle(_title); | |||
} else { | |||
data.addSerie(categoryChart, source); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* | |||
* @param data | |||
* @param categoryChart | |||
* @param chartValueList | |||
* @param title | |||
*/ | |||
private static void buildScatterChartData(ScatterChartData data, ChartDataSource categoryChart, | |||
List<ChartDataSource<Number>> chartValueList, | |||
List<String> title) { | |||
if (chartValueList.size() == title.size()) { | |||
int len = title.size(); | |||
for (int i = 0; i < len; i++) { | |||
data.addSerie(categoryChart, chartValueList.get(i)).setTitle(title.get(i)); | |||
} | |||
} else { | |||
int i = 0; | |||
for (ChartDataSource<Number> source : chartValueList) { | |||
String _title = title.get(i); | |||
if (StringUtils.isNotBlank(_title)) { | |||
data.addSerie(categoryChart, source).setTitle(_title); | |||
} else { | |||
data.addSerie(categoryChart, source); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -9,8 +9,7 @@ package org.jeecgframework.poi.excel.graph.constant; | |||
* @version 1.0 | |||
* 定义元素类型 | |||
*/ | |||
public interface ExcelGraphElementType | |||
{ | |||
public static final Integer StringType=1; | |||
public static final Integer NumericType=2; | |||
public interface ExcelGraphElementType { | |||
public static final Integer STRING_TYPE = 1; | |||
public static final Integer NUMERIC_TYPE = 2; | |||
} |
@@ -9,9 +9,8 @@ package org.jeecgframework.poi.excel.graph.constant; | |||
* @version 1.0 | |||
* 定义图形类型 | |||
*/ | |||
public interface ExcelGraphType | |||
{ | |||
public static final Integer LineChart=1; | |||
public static final Integer ScatterChart=2; | |||
public interface ExcelGraphType { | |||
public static final Integer LINE_CHART = 1; | |||
public static final Integer SCATTER_CHART = 2; | |||
} |
@@ -12,11 +12,14 @@ import java.util.List; | |||
* @see com.dawnpro.core.export.excel.model.ExcelGraph | |||
* | |||
*/ | |||
public interface ExcelGraph | |||
{ | |||
public ExcelGraphElement getCategory(); | |||
public List<ExcelGraphElement> getValueList(); | |||
public Integer getGraphType(); | |||
public List<ExcelTitleCell> getTitleCell(); | |||
public List<String> getTitle(); | |||
public interface ExcelGraph { | |||
public ExcelGraphElement getCategory(); | |||
public List<ExcelGraphElement> getValueList(); | |||
public Integer getGraphType(); | |||
public List<ExcelTitleCell> getTitleCell(); | |||
public List<String> getTitle(); | |||
} |
@@ -15,56 +15,51 @@ import com.google.common.collect.Lists; | |||
* @version 1.0 | |||
* | |||
*/ | |||
public class ExcelGraphDefined implements ExcelGraph | |||
{ | |||
private ExcelGraphElement category; | |||
public List<ExcelGraphElement> valueList=Lists.newArrayList(); | |||
public List<ExcelTitleCell> titleCell=Lists.newArrayList(); | |||
private Integer graphType=ExcelGraphType.LineChart; | |||
public List<String> title=Lists.newArrayList(); | |||
public ExcelGraphElement getCategory() | |||
{ | |||
return category; | |||
} | |||
public void setCategory(ExcelGraphElement category) | |||
{ | |||
this.category = category; | |||
} | |||
public List<ExcelGraphElement> getValueList() | |||
{ | |||
return valueList; | |||
} | |||
public void setValueList(List<ExcelGraphElement> valueList) | |||
{ | |||
this.valueList = valueList; | |||
} | |||
public class ExcelGraphDefined implements ExcelGraph { | |||
private ExcelGraphElement category; | |||
public List<ExcelGraphElement> valueList = Lists.newArrayList(); | |||
public List<ExcelTitleCell> titleCell = Lists.newArrayList(); | |||
private Integer graphType = ExcelGraphType.LINE_CHART; | |||
public List<String> title = Lists.newArrayList(); | |||
public ExcelGraphElement getCategory() { | |||
return category; | |||
} | |||
public void setCategory(ExcelGraphElement category) { | |||
this.category = category; | |||
} | |||
public List<ExcelGraphElement> getValueList() { | |||
return valueList; | |||
} | |||
public void setValueList(List<ExcelGraphElement> valueList) { | |||
this.valueList = valueList; | |||
} | |||
public Integer getGraphType() { | |||
return graphType; | |||
} | |||
public void setGraphType(Integer graphType) { | |||
this.graphType = graphType; | |||
} | |||
public List<ExcelTitleCell> getTitleCell() { | |||
return titleCell; | |||
} | |||
public void setTitleCell(List<ExcelTitleCell> titleCell) { | |||
this.titleCell = titleCell; | |||
} | |||
public List<String> getTitle() { | |||
return title; | |||
} | |||
public void setTitle(List<String> title) { | |||
this.title = title; | |||
} | |||
public Integer getGraphType() | |||
{ | |||
return graphType; | |||
} | |||
public void setGraphType(Integer graphType) | |||
{ | |||
this.graphType = graphType; | |||
} | |||
public List<ExcelTitleCell> getTitleCell() | |||
{ | |||
return titleCell; | |||
} | |||
public void setTitleCell(List<ExcelTitleCell> titleCell) | |||
{ | |||
this.titleCell = titleCell; | |||
} | |||
public List<String> getTitle() | |||
{ | |||
return title; | |||
} | |||
public void setTitle(List<String> title) | |||
{ | |||
this.title = title; | |||
} | |||
} |
@@ -5,60 +5,56 @@ package org.jeecgframework.poi.excel.graph.entity; | |||
import org.jeecgframework.poi.excel.graph.constant.ExcelGraphElementType; | |||
/** | |||
* @author xfworld | |||
* @since 2015-12-30 | |||
* @version 1.0 | |||
* | |||
*/ | |||
public class ExcelGraphElement | |||
{ | |||
private Integer startRowNum; | |||
private Integer endRowNum; | |||
private Integer startColNum; | |||
private Integer endColNum; | |||
private Integer elementType=ExcelGraphElementType.StringType; | |||
public Integer getStartRowNum() | |||
{ | |||
return startRowNum; | |||
} | |||
public void setStartRowNum(Integer startRowNum) | |||
{ | |||
this.startRowNum = startRowNum; | |||
} | |||
public Integer getEndRowNum() | |||
{ | |||
return endRowNum; | |||
} | |||
public void setEndRowNum(Integer endRowNum) | |||
{ | |||
this.endRowNum = endRowNum; | |||
} | |||
public Integer getStartColNum() | |||
{ | |||
return startColNum; | |||
} | |||
public void setStartColNum(Integer startColNum) | |||
{ | |||
this.startColNum = startColNum; | |||
} | |||
public Integer getEndColNum() | |||
{ | |||
return endColNum; | |||
} | |||
public void setEndColNum(Integer endColNum) | |||
{ | |||
this.endColNum = endColNum; | |||
} | |||
public Integer getElementType() | |||
{ | |||
return elementType; | |||
} | |||
public void setElementType(Integer elementType) | |||
{ | |||
this.elementType = elementType; | |||
} | |||
public class ExcelGraphElement { | |||
private Integer startRowNum; | |||
private Integer endRowNum; | |||
private Integer startColNum; | |||
private Integer endColNum; | |||
private Integer elementType = ExcelGraphElementType.STRING_TYPE; | |||
public Integer getStartRowNum() { | |||
return startRowNum; | |||
} | |||
public void setStartRowNum(Integer startRowNum) { | |||
this.startRowNum = startRowNum; | |||
} | |||
public Integer getEndRowNum() { | |||
return endRowNum; | |||
} | |||
public void setEndRowNum(Integer endRowNum) { | |||
this.endRowNum = endRowNum; | |||
} | |||
public Integer getStartColNum() { | |||
return startColNum; | |||
} | |||
public void setStartColNum(Integer startColNum) { | |||
this.startColNum = startColNum; | |||
} | |||
public Integer getEndColNum() { | |||
return endColNum; | |||
} | |||
public void setEndColNum(Integer endColNum) { | |||
this.endColNum = endColNum; | |||
} | |||
public Integer getElementType() { | |||
return elementType; | |||
} | |||
public void setElementType(Integer elementType) { | |||
this.elementType = elementType; | |||
} | |||
} |
@@ -9,36 +9,33 @@ package org.jeecgframework.poi.excel.graph.entity; | |||
* @version 1.0 | |||
* | |||
*/ | |||
public class ExcelTitleCell | |||
{ | |||
private Integer row; | |||
private Integer col; | |||
public ExcelTitleCell(){ | |||
} | |||
public ExcelTitleCell(Integer row,Integer col){ | |||
this.row=row; | |||
this.col=col; | |||
} | |||
public Integer getRow() | |||
{ | |||
return row; | |||
} | |||
public void setRow(Integer row) | |||
{ | |||
this.row = row; | |||
} | |||
public Integer getCol() | |||
{ | |||
return col; | |||
} | |||
public void setCol(Integer col) | |||
{ | |||
this.col = col; | |||
} | |||
public class ExcelTitleCell { | |||
private Integer row; | |||
private Integer col; | |||
public ExcelTitleCell() { | |||
} | |||
public ExcelTitleCell(Integer row, Integer col) { | |||
this.row = row; | |||
this.col = col; | |||
} | |||
public Integer getRow() { | |||
return row; | |||
} | |||
public void setRow(Integer row) { | |||
this.row = row; | |||
} | |||
public Integer getCol() { | |||
return col; | |||
} | |||
public void setCol(Integer col) { | |||
this.col = col; | |||
} | |||
} |
@@ -35,31 +35,32 @@ import org.slf4j.LoggerFactory; | |||
*/ | |||
public class ExcelToHtmlServer { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelToHtmlServer.class); | |||
private static final Logger LOGGER = LoggerFactory | |||
.getLogger(ExcelToHtmlServer.class); | |||
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy_MM_dd"); | |||
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy_MM_dd"); | |||
private String today; | |||
private String today; | |||
private Workbook wb; | |||
private int sheetNum; | |||
private int cssRandom; | |||
private Workbook wb; | |||
private int sheetNum; | |||
private int cssRandom; | |||
/*是不是完成界面*/ | |||
private boolean completeHTML; | |||
private Formatter out; | |||
private boolean completeHTML; | |||
private Formatter out; | |||
/*已经完成范围处理*/ | |||
private boolean gotBounds; | |||
private int firstColumn; | |||
private int endColumn; | |||
private String imageCachePath; | |||
private static final String COL_HEAD_CLASS = "colHeader"; | |||
private boolean gotBounds; | |||
private int firstColumn; | |||
private int endColumn; | |||
private String imageCachePath; | |||
private static final String COL_HEAD_CLASS = "colHeader"; | |||
//private static final String ROW_HEAD_CLASS = "rowHeader"; | |||
private static final String DEFAULTS_CLASS = "excelDefaults"; | |||
private static final String DEFAULTS_CLASS = "excelDefaults"; | |||
//图片缓存 | |||
private Map<String, PictureData> pictures = new HashMap<String, PictureData>(); | |||
private Map<String, PictureData> pictures = new HashMap<String, PictureData>(); | |||
public ExcelToHtmlServer(ExcelToHtmlParams params) { | |||
this.wb = params.getWb(); | |||
@@ -37,8 +37,8 @@ public class CellValueHelper { | |||
is07 = true; | |||
cacheFontInfo(wb); | |||
} else | |||
throw new IllegalArgumentException("unknown workbook type: " | |||
+ wb.getClass().getSimpleName()); | |||
throw new IllegalArgumentException( | |||
"unknown workbook type: " + wb.getClass().getSimpleName()); | |||
} | |||
/** | |||
@@ -91,11 +91,11 @@ public class CellValueHelper { | |||
sb.append("'>"); | |||
currentIndex = rich.getIndexOfFormattingRun(i); | |||
if (i < nums - 1) { | |||
sb.append(XmlEscapers.xmlContentEscaper().escape( | |||
text.substring(currentIndex, rich.getIndexOfFormattingRun(i + 1)))); | |||
sb.append(XmlEscapers.xmlContentEscaper() | |||
.escape(text.substring(currentIndex, rich.getIndexOfFormattingRun(i + 1)))); | |||
} else { | |||
sb.append(XmlEscapers.xmlContentEscaper().escape( | |||
text.substring(currentIndex, text.length()))); | |||
sb.append(XmlEscapers.xmlContentEscaper() | |||
.escape(text.substring(currentIndex, text.length()))); | |||
} | |||
sb.append("</span>"); | |||
} | |||
@@ -122,10 +122,10 @@ public class CellValueHelper { | |||
} catch (Exception e) { | |||
} | |||
sb.append(">"); | |||
currentIndex = rich.getIndexOfFormattingRun(i) == -1 ? text.length() : rich | |||
.getIndexOfFormattingRun(i); | |||
sb.append(XmlEscapers.xmlContentEscaper().escape( | |||
text.substring(lastIndex, currentIndex))); | |||
currentIndex = rich.getIndexOfFormattingRun(i) == -1 ? text.length() | |||
: rich.getIndexOfFormattingRun(i); | |||
sb.append( | |||
XmlEscapers.xmlContentEscaper().escape(text.substring(lastIndex, currentIndex))); | |||
sb.append("</span>"); | |||
lastIndex = currentIndex; | |||
} | |||
@@ -133,8 +133,8 @@ public class CellValueHelper { | |||
} | |||
private String getFontIndex(XSSFFont font) { | |||
return fontCache.get(font.getBoldweight() + "_" + font.getItalic() + "_" | |||
+ font.getFontName() + "_" + font.getFontHeightInPoints() + "_" | |||
+ font.getColor()); | |||
return fontCache | |||
.get(font.getBoldweight() + "_" + font.getItalic() + "_" + font.getFontName() + "_" | |||
+ font.getFontHeightInPoints() + "_" + font.getColor()); | |||
} | |||
} |
@@ -46,8 +46,8 @@ public class MergedRegionHelper { | |||
endCol = (endCol + 1) * 26 + (strArr[1].charAt(1) - 65); | |||
} | |||
int endRol = Integer.valueOf(strArr[1].substring(strArr[1].charAt(1) >= 65 ? 2 : 1)); | |||
mergedCache.put(startRol + "_" + startCol, new Integer[] { endRol - startRol + 1, | |||
endCol - startCol + 1 }); | |||
mergedCache.put(startRol + "_" + startCol, | |||
new Integer[] { endRol - startRol + 1, endCol - startCol + 1 }); | |||
for (int i = startRol; i <= endRol; i++) { | |||
for (int j = startCol; j <= endCol; j++) { | |||
notNeedCread.add(i + "_" + j); | |||
@@ -47,19 +47,12 @@ public class StylerHelper { | |||
private static final String DEFAULTS_CLASS = "excelDefaults"; | |||
private static final Map<Short, String> ALIGN = PoiPublicUtil | |||
.mapFor(ALIGN_LEFT, "left", | |||
ALIGN_CENTER, "center", | |||
ALIGN_RIGHT, "right", | |||
ALIGN_FILL, "left", | |||
ALIGN_JUSTIFY, "left", | |||
ALIGN_CENTER_SELECTION, | |||
"center"); | |||
private static final Map<Short, String> VERTICAL_ALIGN = PoiPublicUtil.mapFor( | |||
VERTICAL_BOTTOM, "bottom", | |||
VERTICAL_CENTER, "middle", | |||
VERTICAL_TOP, "top"); | |||
private static final Map<Short, String> ALIGN = PoiPublicUtil.mapFor(ALIGN_LEFT, | |||
"left", ALIGN_CENTER, "center", ALIGN_RIGHT, "right", ALIGN_FILL, "left", ALIGN_JUSTIFY, | |||
"left", ALIGN_CENTER_SELECTION, "center"); | |||
private static final Map<Short, String> VERTICAL_ALIGN = PoiPublicUtil | |||
.mapFor(VERTICAL_BOTTOM, "bottom", VERTICAL_CENTER, "middle", VERTICAL_TOP, "top"); | |||
private Formatter out; | |||
@@ -80,8 +73,8 @@ public class StylerHelper { | |||
else if (wb instanceof XSSFWorkbook) | |||
helper = new XSSFHtmlHelper((XSSFWorkbook) wb); | |||
else | |||
throw new IllegalArgumentException("unknown workbook type: " | |||
+ wb.getClass().getSimpleName()); | |||
throw new IllegalArgumentException( | |||
"unknown workbook type: " + wb.getClass().getSimpleName()); | |||
printInlineStyle(wb); | |||
} | |||
@@ -127,8 +120,8 @@ public class StylerHelper { | |||
StringBuilder sb = new StringBuilder(); | |||
Formatter formatter = new Formatter(sb); | |||
try { | |||
in = new BufferedReader(new InputStreamReader( | |||
StylerHelper.class.getResourceAsStream("excelStyle.css"))); | |||
in = new BufferedReader( | |||
new InputStreamReader(StylerHelper.class.getResourceAsStream("excelStyle.css"))); | |||
String line; | |||
while ((line = in.readLine()) != null) { | |||
formatter.format("%s%n", line); | |||
@@ -48,9 +48,9 @@ import org.slf4j.LoggerFactory; | |||
*/ | |||
public class CellValueServer { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(CellValueServer.class); | |||
private static final Logger LOGGER = LoggerFactory.getLogger(CellValueServer.class); | |||
private List<String> hanlderList = null; | |||
private List<String> hanlderList = null; | |||
/** | |||
* 获取单元格内的值 | |||
@@ -243,7 +243,7 @@ public class CellValueServer { | |||
private Object getValueByType(String xclass, Object result, ExcelImportEntity entity) { | |||
try { | |||
//过滤空和空字符串,如果基本类型null会在上层抛出,这里就不处理了 | |||
if(result == null || StringUtils.isBlank(result.toString())){ | |||
if (result == null || StringUtils.isBlank(result.toString())) { | |||
return null; | |||
} | |||
if ("class java.util.Date".equals(xclass)) { | |||
@@ -69,15 +69,15 @@ import org.slf4j.LoggerFactory; | |||
@SuppressWarnings({ "rawtypes", "unchecked", "hiding" }) | |||
public class ExcelImportServer extends ImportBaseService { | |||
private final static Logger LOGGER = LoggerFactory.getLogger(ExcelImportServer.class); | |||
private final static Logger LOGGER = LoggerFactory.getLogger(ExcelImportServer.class); | |||
private CellValueServer cellValueServer; | |||
private CellValueServer cellValueServer; | |||
private boolean verfiyFail = false; | |||
private boolean verfiyFail = false; | |||
/** | |||
* 异常数据styler | |||
*/ | |||
private CellStyle errorCellStyle; | |||
private CellStyle errorCellStyle; | |||
public ExcelImportServer() { | |||
this.cellValueServer = new CellValueServer(); | |||
@@ -195,7 +195,7 @@ public class ExcelImportServer extends ImportBaseService { | |||
rows.next(); | |||
} | |||
Map<Integer, String> titlemap = getTitleMap(rows, params, excelCollection); | |||
checkIsValidTemplate(titlemap, excelParams, params,excelCollection); | |||
checkIsValidTemplate(titlemap, excelParams, params, excelCollection); | |||
Row row = null; | |||
Object object = null; | |||
String picId; | |||
@@ -415,31 +415,36 @@ public class ExcelImportServer extends ImportBaseService { | |||
* @param params | |||
* @param excelCollection | |||
*/ | |||
private void checkIsValidTemplate(Map<Integer, String> titlemap, Map<String, ExcelImportEntity> excelParams, ImportParams params, List<ExcelCollectionParams> excelCollection) { | |||
if(params.getImportFields() != null){ | |||
for (int i = 0 ,le = params.getImportFields().length; i < le; i++) { | |||
if(!titlemap.containsValue(params.getImportFields()[i])){ | |||
throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | |||
private void checkIsValidTemplate(Map<Integer, String> titlemap, | |||
Map<String, ExcelImportEntity> excelParams, | |||
ImportParams params, | |||
List<ExcelCollectionParams> excelCollection) { | |||
if (params.getImportFields() != null) { | |||
for (int i = 0, le = params.getImportFields().length; i < le; i++) { | |||
if (!titlemap.containsValue(params.getImportFields()[i])) { | |||
throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | |||
} | |||
} | |||
} else { | |||
Collection<ExcelImportEntity> collection = excelParams.values(); | |||
for (ExcelImportEntity excelImportEntity : collection) { | |||
if(excelImportEntity.isImportField() && !titlemap.containsValue(excelImportEntity.getName())){ | |||
throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | |||
} | |||
} | |||
for (int i = 0, le = excelCollection.size(); i < le; i++) { | |||
ExcelCollectionParams collectionparams = excelCollection.get(i); | |||
collection = collectionparams.getExcelParams().values(); | |||
for (ExcelImportEntity excelImportEntity : collection) { | |||
if(excelImportEntity.isImportField() && !titlemap.containsValue(collectionparams.getExcelName()+"_"+excelImportEntity.getName())){ | |||
throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | |||
} | |||
} | |||
} | |||
Collection<ExcelImportEntity> collection = excelParams.values(); | |||
for (ExcelImportEntity excelImportEntity : collection) { | |||
if (excelImportEntity.isImportField() | |||
&& !titlemap.containsValue(excelImportEntity.getName())) { | |||
throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | |||
} | |||
} | |||
for (int i = 0, le = excelCollection.size(); i < le; i++) { | |||
ExcelCollectionParams collectionparams = excelCollection.get(i); | |||
collection = collectionparams.getExcelParams().values(); | |||
for (ExcelImportEntity excelImportEntity : collection) { | |||
if (excelImportEntity.isImportField() && !titlemap.containsValue( | |||
collectionparams.getExcelName() + "_" + excelImportEntity.getName())) { | |||
throw new ExcelImportException(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
@@ -82,8 +82,8 @@ public class SaxReadExcel { | |||
} | |||
} | |||
private XMLReader fetchSheetParser(SharedStringsTable sst, ISaxRowRead rowRead) | |||
throws SAXException { | |||
private XMLReader fetchSheetParser(SharedStringsTable sst, | |||
ISaxRowRead rowRead) throws SAXException { | |||
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); | |||
ContentHandler handler = new SheetHandler(sst, rowRead); | |||
parser.setContentHandler(handler); | |||
@@ -59,8 +59,8 @@ public class SheetHandler extends DefaultHandler { | |||
} | |||
@Override | |||
public void startElement(String uri, String localName, String name, Attributes attributes) | |||
throws SAXException { | |||
public void startElement(String uri, String localName, String name, | |||
Attributes attributes) throws SAXException { | |||
// 置空 | |||
lastContents = ""; | |||
// c => 单元格 | |||
@@ -26,6 +26,7 @@ public interface ISaxRowRead { | |||
* @return | |||
*/ | |||
public <T> List<T> getList(); | |||
/** | |||
* 解析数据 | |||
* @param index | |||
@@ -33,5 +34,4 @@ public interface ISaxRowRead { | |||
*/ | |||
public void parse(int index, List<SaxReadCellEntity> datas); | |||
} |
@@ -49,7 +49,7 @@ import com.google.common.collect.Lists; | |||
public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||
private static final Logger LOGGER = LoggerFactory | |||
.getLogger(SaxRowRead.class); | |||
.getLogger(SaxRowRead.class); | |||
/** 需要返回的数据 **/ | |||
private List list; | |||
/** 导出的对象 **/ | |||
@@ -129,8 +129,9 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||
*/ | |||
private void addListData(List<SaxReadCellEntity> datas) throws Exception { | |||
// 判断是集合元素还是不是集合元素,如果是就继续加入这个集合,不是就创建新的对象 | |||
if ((datas.get(params.getKeyIndex()) == null || StringUtils.isEmpty(String.valueOf(datas | |||
.get(params.getKeyIndex()).getValue()))) && object != null) { | |||
if ((datas.get(params.getKeyIndex()) == null | |||
|| StringUtils.isEmpty(String.valueOf(datas.get(params.getKeyIndex()).getValue()))) | |||
&& object != null) { | |||
for (ExcelCollectionParams param : excelCollection) { | |||
addListContinue(object, param, datas, titlemap, targetId, params); | |||
} | |||
@@ -171,7 +172,8 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||
private void addListContinue(Object object, ExcelCollectionParams param, | |||
List<SaxReadCellEntity> datas, Map<Integer, String> titlemap, | |||
String targetId, ImportParams params) throws Exception { | |||
Collection collection = (Collection) PoiReflectorUtil.fromCache(pojoClass).getValue(object, param.getName()); | |||
Collection collection = (Collection) PoiReflectorUtil.fromCache(pojoClass).getValue(object, | |||
param.getName()); | |||
Object entity = PoiPublicUtil.createObject(param.getType(), targetId); | |||
boolean isUsed = false;// 是否需要加上这个对象 | |||
for (int i = 0; i < datas.size(); i++) { | |||
@@ -196,8 +198,8 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||
* @throws Exception | |||
*/ | |||
private void saveFieldValue(ImportParams params, Object object, SaxReadCellEntity entity, | |||
Map<String, ExcelImportEntity> excelParams, String titleString) | |||
throws Exception { | |||
Map<String, ExcelImportEntity> excelParams, | |||
String titleString) throws Exception { | |||
Object value = cellValueServer.getValue(params.getDataHanlder(), object, entity, | |||
excelParams, titleString); | |||
setValues(excelParams.get(titleString), object, value); | |||
@@ -26,7 +26,7 @@ public class ExcelImportException extends RuntimeException { | |||
private static final long serialVersionUID = 1L; | |||
private ExcelImportEnum type; | |||
private ExcelImportEnum type; | |||
public ExcelImportException() { | |||
super(); | |||
@@ -22,7 +22,9 @@ package org.jeecgframework.poi.exception.excel.enums; | |||
*/ | |||
public enum ExcelExportEnum { | |||
PARAMETER_ERROR("Excel 导出 参数错误"), EXPORT_ERROR("Excel导出错误"),TEMPLATE_ERROR("Excel 模板错误"); | |||
PARAMETER_ERROR ("Excel 导出 参数错误") , | |||
EXPORT_ERROR ("Excel导出错误") , | |||
TEMPLATE_ERROR ("Excel 模板错误"); | |||
private String msg; | |||
@@ -22,7 +22,9 @@ package org.jeecgframework.poi.exception.excel.enums; | |||
*/ | |||
public enum ExcelImportEnum { | |||
IS_NOT_A_VALID_TEMPLATE("不是合法的Excel模板"), GET_VALUE_ERROR("Excel 值获取失败"), VERIFY_ERROR("值校验失败"); | |||
IS_NOT_A_VALID_TEMPLATE ("不是合法的Excel模板") , | |||
GET_VALUE_ERROR ("Excel 值获取失败") , | |||
VERIFY_ERROR ("值校验失败"); | |||
private String msg; | |||
@@ -14,18 +14,20 @@ | |||
* limitations under the License. | |||
*/ | |||
package org.jeecgframework.poi.handler.inter; | |||
/** | |||
* Excel标记类 | |||
* @author JueYue | |||
* @date 2015年10月31日 下午9:31:47 | |||
*/ | |||
public interface IExcelModel { | |||
/** | |||
* 获取错误数据 | |||
* @return | |||
*/ | |||
public String getErrorMsg(); | |||
/** | |||
* 设置错误信息 | |||
* @param errorMsg | |||
@@ -15,114 +15,113 @@ import org.apache.poi.ss.util.CellRangeAddress; | |||
* @see org.jeecgframework.poi.util.PoiCellUtil | |||
* 获取单元格的值 | |||
*/ | |||
public class PoiCellUtil | |||
{ | |||
/** | |||
* 读取单元格的值 | |||
* @param sheet | |||
* @param row | |||
* @param column | |||
* @return | |||
*/ | |||
public static String getCellValue(Sheet sheet ,int row , int column) | |||
{ | |||
String value=null; | |||
if(isMergedRegion(sheet ,row ,column)){ | |||
value=getMergedRegionValue(sheet ,row ,column); | |||
}else{ | |||
Row rowData=sheet.getRow(row); | |||
Cell cell=rowData.getCell(column); | |||
value=getCellValue(cell); | |||
} | |||
return value; | |||
} | |||
/** | |||
* 获取合并单元格的值 | |||
* @param sheet | |||
* @param row | |||
* @param column | |||
* @return | |||
*/ | |||
public static String getMergedRegionValue(Sheet sheet ,int row , int column){ | |||
int sheetMergeCount = sheet.getNumMergedRegions(); | |||
for(int i = 0 ; i < sheetMergeCount ; i++){ | |||
CellRangeAddress ca = sheet.getMergedRegion(i); | |||
int firstColumn = ca.getFirstColumn(); | |||
int lastColumn = ca.getLastColumn(); | |||
int firstRow = ca.getFirstRow(); | |||
int lastRow = ca.getLastRow(); | |||
if(row >= firstRow && row <= lastRow){ | |||
if(column >= firstColumn && column <= lastColumn){ | |||
Row fRow = sheet.getRow(firstRow); | |||
Cell fCell = fRow.getCell(firstColumn); | |||
return getCellValue(fCell) ; | |||
} | |||
} | |||
} | |||
return null ; | |||
} | |||
/** | |||
* 判断指定的单元格是否是合并单元格 | |||
* @param sheet | |||
* @param row | |||
* @param column | |||
* @return | |||
*/ | |||
public static boolean isMergedRegion(Sheet sheet , int row , int column){ | |||
int sheetMergeCount = sheet.getNumMergedRegions(); | |||
for(int i = 0 ; i < sheetMergeCount ; i++ ){ | |||
CellRangeAddress ca = sheet.getMergedRegion(i); | |||
int firstColumn = ca.getFirstColumn(); | |||
int lastColumn = ca.getLastColumn(); | |||
int firstRow = ca.getFirstRow(); | |||
int lastRow = ca.getLastRow(); | |||
if(row >= firstRow && row <= lastRow){ | |||
if(column >= firstColumn && column <= lastColumn){ | |||
return true ; | |||
} | |||
} | |||
} | |||
return false ; | |||
} | |||
/** | |||
* 获取单元格的值 | |||
* @param cell | |||
* @return | |||
*/ | |||
public static String getCellValue(Cell cell){ | |||
if(cell == null) return ""; | |||
if(cell.getCellType() == Cell.CELL_TYPE_STRING){ | |||
return cell.getStringCellValue(); | |||
}else if(cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){ | |||
return String.valueOf(cell.getBooleanCellValue()); | |||
}else if(cell.getCellType() == Cell.CELL_TYPE_FORMULA){ | |||
return cell.getCellFormula() ; | |||
}else if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){ | |||
return String.valueOf(cell.getNumericCellValue()); | |||
} | |||
return ""; | |||
} | |||
public class PoiCellUtil { | |||
/** | |||
* 读取单元格的值 | |||
* @param sheet | |||
* @param row | |||
* @param column | |||
* @return | |||
*/ | |||
public static String getCellValue(Sheet sheet, int row, int column) { | |||
String value = null; | |||
if (isMergedRegion(sheet, row, column)) { | |||
value = getMergedRegionValue(sheet, row, column); | |||
} else { | |||
Row rowData = sheet.getRow(row); | |||
Cell cell = rowData.getCell(column); | |||
value = getCellValue(cell); | |||
} | |||
return value; | |||
} | |||
/** | |||
* 获取合并单元格的值 | |||
* @param sheet | |||
* @param row | |||
* @param column | |||
* @return | |||
*/ | |||
public static String getMergedRegionValue(Sheet sheet, int row, int column) { | |||
int sheetMergeCount = sheet.getNumMergedRegions(); | |||
for (int i = 0; i < sheetMergeCount; i++) { | |||
CellRangeAddress ca = sheet.getMergedRegion(i); | |||
int firstColumn = ca.getFirstColumn(); | |||
int lastColumn = ca.getLastColumn(); | |||
int firstRow = ca.getFirstRow(); | |||
int lastRow = ca.getLastRow(); | |||
if (row >= firstRow && row <= lastRow) { | |||
if (column >= firstColumn && column <= lastColumn) { | |||
Row fRow = sheet.getRow(firstRow); | |||
Cell fCell = fRow.getCell(firstColumn); | |||
return getCellValue(fCell); | |||
} | |||
} | |||
} | |||
return null; | |||
} | |||
/** | |||
* 判断指定的单元格是否是合并单元格 | |||
* @param sheet | |||
* @param row | |||
* @param column | |||
* @return | |||
*/ | |||
public static boolean isMergedRegion(Sheet sheet, int row, int column) { | |||
int sheetMergeCount = sheet.getNumMergedRegions(); | |||
for (int i = 0; i < sheetMergeCount; i++) { | |||
CellRangeAddress ca = sheet.getMergedRegion(i); | |||
int firstColumn = ca.getFirstColumn(); | |||
int lastColumn = ca.getLastColumn(); | |||
int firstRow = ca.getFirstRow(); | |||
int lastRow = ca.getLastRow(); | |||
if (row >= firstRow && row <= lastRow) { | |||
if (column >= firstColumn && column <= lastColumn) { | |||
return true; | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* 获取单元格的值 | |||
* @param cell | |||
* @return | |||
*/ | |||
public static String getCellValue(Cell cell) { | |||
if (cell == null) | |||
return ""; | |||
if (cell.getCellType() == Cell.CELL_TYPE_STRING) { | |||
return cell.getStringCellValue(); | |||
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { | |||
return String.valueOf(cell.getBooleanCellValue()); | |||
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { | |||
return cell.getCellFormula(); | |||
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { | |||
return String.valueOf(cell.getNumericCellValue()); | |||
} | |||
return ""; | |||
} | |||
} |
@@ -25,8 +25,6 @@ import org.jeecgframework.poi.exception.excel.ExcelExportException; | |||
* @date 2015年4月25日 下午12:13:21 | |||
*/ | |||
public final class PoiElUtil { | |||
public static final String LENGTH = "le:"; | |||
public static final String FOREACH = "fe:"; | |||
@@ -41,7 +39,7 @@ public final class PoiElUtil { | |||
public static final String IF_DELETE = "!if:"; | |||
public static final String EMPTY = ""; | |||
public static final String CONST = "'"; | |||
public static final String NULL = "&NULL&"; | |||
public static final String NULL = "&NULL&"; | |||
public static final String LEFT_BRACKET = "("; | |||
public static final String RIGHT_BRACKET = ")"; | |||
@@ -3,8 +3,6 @@ | |||
*/ | |||
package org.jeecgframework.poi.util; | |||
import java.util.List; | |||
import org.apache.poi.ss.usermodel.Sheet; | |||
@@ -17,39 +15,36 @@ import org.jeecgframework.poi.excel.graph.entity.ExcelGraphElement; | |||
* @version 1.0 | |||
* 构建特殊数据结构 | |||
*/ | |||
public class PoiExcelGraphDataUtil | |||
{ | |||
/** | |||
* 构建获取数据最后行数 并写入到定义对象中 | |||
* @param dataSourceSheet | |||
* @param graph | |||
*/ | |||
public static void buildGraphData(Sheet dataSourceSheet,ExcelGraph graph){ | |||
if(graph!=null&&graph.getCategory()!=null&&graph.getValueList()!=null&&graph.getValueList().size()>0){ | |||
graph.getCategory().setEndRowNum(dataSourceSheet.getLastRowNum()); | |||
for(ExcelGraphElement e:graph.getValueList()){ | |||
if(e!=null){ | |||
e.setEndRowNum(dataSourceSheet.getLastRowNum()); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 构建多个图形对象 | |||
* @param dataSourceSheet | |||
* @param graphList | |||
*/ | |||
public static void buildGraphData(Sheet dataSourceSheet,List<ExcelGraph> graphList){ | |||
if(graphList!=null&&graphList.size()>0){ | |||
for(ExcelGraph graph:graphList){ | |||
buildGraphData(dataSourceSheet,graph); | |||
} | |||
} | |||
} | |||
public class PoiExcelGraphDataUtil { | |||
/** | |||
* 构建获取数据最后行数 并写入到定义对象中 | |||
* @param dataSourceSheet | |||
* @param graph | |||
*/ | |||
public static void buildGraphData(Sheet dataSourceSheet, ExcelGraph graph) { | |||
if (graph != null && graph.getCategory() != null && graph.getValueList() != null | |||
&& graph.getValueList().size() > 0) { | |||
graph.getCategory().setEndRowNum(dataSourceSheet.getLastRowNum()); | |||
for (ExcelGraphElement e : graph.getValueList()) { | |||
if (e != null) { | |||
e.setEndRowNum(dataSourceSheet.getLastRowNum()); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 构建多个图形对象 | |||
* @param dataSourceSheet | |||
* @param graphList | |||
*/ | |||
public static void buildGraphData(Sheet dataSourceSheet, List<ExcelGraph> graphList) { | |||
if (graphList != null && graphList.size() > 0) { | |||
for (ExcelGraph graph : graphList) { | |||
buildGraphData(dataSourceSheet, graph); | |||
} | |||
} | |||
} | |||
} |
@@ -179,5 +179,5 @@ public final class PoiFunctionUtil { | |||
double two = Double.valueOf(second.toString()); | |||
return one > two; | |||
} | |||
} |
@@ -166,7 +166,8 @@ public final class PoiMergeCellUtil { | |||
// 存在依赖关系 测试 | |||
if (mergeEntity.getText().equals(text)) { | |||
for (int i = 0; i < delys.length; i++) { | |||
if (mergeEntity.getRelyList().get(i) ==null || !mergeEntity.getRelyList().get(i).equals(getCellNotNullText(cell, delys[i], rowNum))) { | |||
if (mergeEntity.getRelyList().get(i) == null || !mergeEntity.getRelyList().get(i) | |||
.equals(getCellNotNullText(cell, delys[i], rowNum))) { | |||
return false; | |||
} | |||
} | |||
@@ -184,13 +185,15 @@ public final class PoiMergeCellUtil { | |||
* @return | |||
*/ | |||
private static String getCellNotNullText(Cell cell, int index, int rowNum) { | |||
if(cell == null || cell.getRow() == null){ | |||
if (cell == null || cell.getRow() == null) { | |||
return null; | |||
} | |||
if(cell.getRow().getCell(index) != null && StringUtils.isNotEmpty(cell.getRow().getCell(index).getStringCellValue())){ | |||
if (cell.getRow().getCell(index) != null | |||
&& StringUtils.isNotEmpty(cell.getRow().getCell(index).getStringCellValue())) { | |||
return cell.getRow().getCell(index).getStringCellValue(); | |||
} | |||
return getCellNotNullText(cell.getRow().getSheet().getRow(--rowNum).getCell(index),index,rowNum); | |||
return getCellNotNullText(cell.getRow().getSheet().getRow(--rowNum).getCell(index), index, | |||
rowNum); | |||
} | |||
} |
@@ -100,9 +100,11 @@ public final class PoiPublicUtil { | |||
} | |||
if (isCollection(field.getType())) { | |||
ExcelCollection collection = field.getAnnotation(ExcelCollection.class); | |||
PoiReflectorUtil.fromCache(clazz).setValue(obj , field.getName(), collection.type().newInstance()); | |||
PoiReflectorUtil.fromCache(clazz).setValue(obj, field.getName(), | |||
collection.type().newInstance()); | |||
} else if (!isJavaClass(field)) { | |||
PoiReflectorUtil.fromCache(clazz).setValue(obj , field.getName(), createObject(field.getType(), targetId)); | |||
PoiReflectorUtil.fromCache(clazz).setValue(obj, field.getName(), | |||
createObject(field.getType(), targetId)); | |||
} | |||
} | |||
@@ -163,7 +165,8 @@ public final class PoiPublicUtil { | |||
* 工作簿对象 | |||
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData | |||
*/ | |||
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>(); | |||
List<HSSFPictureData> pictures = workbook.getAllPictures(); | |||
if (!pictures.isEmpty()) { | |||
@@ -193,7 +196,8 @@ public final class PoiPublicUtil { | |||
* 工作簿对象 | |||
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData | |||
*/ | |||
public static Map<String, PictureData> getSheetPictrues07(XSSFSheet sheet, XSSFWorkbook workbook) { | |||
public static Map<String, PictureData> getSheetPictrues07(XSSFSheet sheet, | |||
XSSFWorkbook workbook) { | |||
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); | |||
for (POIXMLDocumentPart dr : sheet.getRelations()) { | |||
if (dr instanceof XSSFDrawing) { | |||
@@ -266,23 +270,20 @@ public final class PoiPublicUtil { | |||
boolean boo = true; | |||
if (field.getAnnotation(ExcelIgnore.class) != null) { | |||
boo = true; | |||
} else if (boo | |||
&& field.getAnnotation(ExcelCollection.class) != null | |||
} else if (boo && field.getAnnotation(ExcelCollection.class) != null | |||
&& isUseInThis(field.getAnnotation(ExcelCollection.class).name(), targetId) | |||
&& (exclusionsList == null || !exclusionsList.contains(field.getAnnotation( | |||
ExcelCollection.class).name()))) { | |||
&& (exclusionsList == null || !exclusionsList | |||
.contains(field.getAnnotation(ExcelCollection.class).name()))) { | |||
boo = false; | |||
} else if (boo | |||
&& field.getAnnotation(Excel.class) != null | |||
} else if (boo && field.getAnnotation(Excel.class) != null | |||
&& isUseInThis(field.getAnnotation(Excel.class).name(), targetId) | |||
&& (exclusionsList == null || !exclusionsList.contains(field.getAnnotation( | |||
Excel.class).name()))) { | |||
&& (exclusionsList == null | |||
|| !exclusionsList.contains(field.getAnnotation(Excel.class).name()))) { | |||
boo = false; | |||
} else if (boo | |||
&& field.getAnnotation(ExcelEntity.class) != null | |||
} else if (boo && field.getAnnotation(ExcelEntity.class) != null | |||
&& isUseInThis(field.getAnnotation(ExcelEntity.class).name(), targetId) | |||
&& (exclusionsList == null || !exclusionsList.contains(field.getAnnotation( | |||
ExcelEntity.class).name()))) { | |||
&& (exclusionsList == null || !exclusionsList | |||
.contains(field.getAnnotation(ExcelEntity.class).name()))) { | |||
boo = false; | |||
} | |||
return boo; | |||
@@ -331,15 +332,12 @@ public final class PoiPublicUtil { | |||
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); | |||
BufferedImage bufferImg; | |||
String path = Thread.currentThread().getContextClassLoader().getResource("").toURI() | |||
.getPath() | |||
+ entity.getUrl(); | |||
.getPath() + entity.getUrl(); | |||
path = path.replace("WEB-INF/classes/", ""); | |||
path = path.replace("file:/", ""); | |||
bufferImg = ImageIO.read(new File(path)); | |||
ImageIO.write( | |||
bufferImg, | |||
entity.getUrl().substring(entity.getUrl().indexOf(".") + 1, | |||
entity.getUrl().length()), byteArrayOut); | |||
ImageIO.write(bufferImg, entity.getUrl().substring(entity.getUrl().indexOf(".") + 1, | |||
entity.getUrl().length()), byteArrayOut); | |||
result[0] = byteArrayOut.toByteArray(); | |||
type = entity.getUrl().split("/.")[entity.getUrl().split("/.").length - 1]; | |||
} else { | |||
@@ -376,11 +374,12 @@ public final class PoiPublicUtil { | |||
* @date 2013-11-16 | |||
* @return | |||
*/ | |||
public static Object getRealValue(String currentText, Map<String, Object> map) throws Exception { | |||
public static Object getRealValue(String currentText, | |||
Map<String, Object> map) throws Exception { | |||
String params = ""; | |||
while (currentText.indexOf(START_STR) != -1) { | |||
params = currentText | |||
.substring(currentText.indexOf(START_STR) + 2, currentText.indexOf(END_STR)); | |||
params = currentText.substring(currentText.indexOf(START_STR) + 2, | |||
currentText.indexOf(END_STR)); | |||
Object obj = PoiElUtil.eval(params.trim(), map); | |||
//判断图片或者是集合 | |||
@@ -404,8 +403,8 @@ public final class PoiPublicUtil { | |||
* @throws Exception | |||
*/ | |||
@SuppressWarnings("rawtypes") | |||
public static Object getValueDoWhile(Object object, String[] paramsArr, int index) | |||
throws Exception { | |||
public static Object getValueDoWhile(Object object, String[] paramsArr, | |||
int index) throws Exception { | |||
if (object == null) { | |||
return ""; | |||
} | |||
@@ -415,10 +414,11 @@ public final class PoiPublicUtil { | |||
if (object instanceof Map) { | |||
object = ((Map) object).get(paramsArr[index]); | |||
} else { | |||
object = PoiReflectorUtil.fromCache(object.getClass()).getValue(object, paramsArr[index]); | |||
object = PoiReflectorUtil.fromCache(object.getClass()).getValue(object, | |||
paramsArr[index]); | |||
} | |||
return (index == paramsArr.length - 1) ? (object == null ? "" : object) : getValueDoWhile( | |||
object, paramsArr, ++index); | |||
return (index == paramsArr.length - 1) ? (object == null ? "" : object) | |||
: getValueDoWhile(object, paramsArr, ++index); | |||
} | |||
/** | |||
@@ -434,14 +434,14 @@ public final class PoiPublicUtil { | |||
} | |||
return temp; | |||
} | |||
/** | |||
* 统一 key的获取规则 | |||
* @param key | |||
* @param targetId | |||
* @return | |||
*/ | |||
public static String getValueByTargetId(String key, String targetId, String defalut){ | |||
public static String getValueByTargetId(String key, String targetId, String defalut) { | |||
if (StringUtils.isEmpty(targetId) || key.indexOf("_") < 0) { | |||
return key; | |||
} | |||
@@ -449,7 +449,7 @@ public final class PoiPublicUtil { | |||
String[] tempArr; | |||
for (String str : arr) { | |||
tempArr = str.split("_"); | |||
if(tempArr == null || tempArr.length < 2){ | |||
if (tempArr == null || tempArr.length < 2) { | |||
return defalut; | |||
} | |||
if (targetId.equals(tempArr[1])) { | |||
@@ -458,15 +458,14 @@ public final class PoiPublicUtil { | |||
} | |||
return defalut; | |||
} | |||
/** | |||
* 支持换行操作 | |||
* @param currentRun | |||
* @param currentText | |||
*/ | |||
public static void setWordText(XWPFRun currentRun, String currentText) { | |||
if(StringUtils.isNotBlank(currentText)){ | |||
if (StringUtils.isNotBlank(currentText)) { | |||
String[] tempArr = currentText.split("\r\n"); | |||
for (int i = 0, le = tempArr.length - 1; i < le; i++) { | |||
currentRun.setText(tempArr[i], i); | |||
@@ -476,5 +475,4 @@ public final class PoiPublicUtil { | |||
} | |||
} | |||
} |
@@ -21,11 +21,11 @@ public final class PoiReflectorUtil { | |||
private static final Map<Class<?>, PoiReflectorUtil> CACHE_REFLECTOR = new ConcurrentHashMap<Class<?>, PoiReflectorUtil>(); | |||
private Map<String, Method> getMethods = new HashMap<String, Method>(); | |||
private Map<String, Method> setMethods = new HashMap<String, Method>(); | |||
private List<Field> fieldList = new ArrayList<Field>(); | |||
private Map<String, Method> getMethods = new HashMap<String, Method>(); | |||
private Map<String, Method> setMethods = new HashMap<String, Method>(); | |||
private List<Field> fieldList = new ArrayList<Field>(); | |||
private Class<?> type; | |||
private Class<?> type; | |||
private PoiReflectorUtil(Class<?> clazz) { | |||
addGetMethods(clazz); | |||
@@ -80,9 +80,10 @@ public final class PoiReflectorUtil { | |||
if (methodType.equals(getterType)) { | |||
throw new RuntimeException( | |||
"Illegal overloaded getter method with ambiguous type for property " | |||
+ propName + " in class " + firstMethod.getDeclaringClass() | |||
+ ". This breaks the JavaBeans " | |||
+ "specification and can cause unpredicatble results."); | |||
+ propName + " in class " | |||
+ firstMethod.getDeclaringClass() | |||
+ ". This breaks the JavaBeans " | |||
+ "specification and can cause unpredicatble results."); | |||
} else if (methodType.isAssignableFrom(getterType)) { | |||
// OK getter type is descendant | |||
} else if (getterType.isAssignableFrom(methodType)) { | |||
@@ -91,9 +92,10 @@ public final class PoiReflectorUtil { | |||
} else { | |||
throw new RuntimeException( | |||
"Illegal overloaded getter method with ambiguous type for property " | |||
+ propName + " in class " + firstMethod.getDeclaringClass() | |||
+ ". This breaks the JavaBeans " | |||
+ "specification and can cause unpredicatble results."); | |||
+ propName + " in class " | |||
+ firstMethod.getDeclaringClass() | |||
+ ". This breaks the JavaBeans " | |||
+ "specification and can cause unpredicatble results."); | |||
} | |||
} | |||
addGetMethod(propName, getter); | |||
@@ -121,7 +123,7 @@ public final class PoiReflectorUtil { | |||
} | |||
resolveSetterConflicts(conflictingSetters); | |||
} | |||
private static String methodToProperty(String name) { | |||
if (name.startsWith("is")) { | |||
name = name.substring(2); | |||
@@ -168,9 +170,10 @@ public final class PoiReflectorUtil { | |||
if (setter == null) { | |||
throw new RuntimeException( | |||
"Illegal overloaded setter method with ambiguous type for property " | |||
+ propName + " in class " + firstMethod.getDeclaringClass() | |||
+ ". This breaks the JavaBeans " | |||
+ "specification and can cause unpredicatble results."); | |||
+ propName + " in class " | |||
+ firstMethod.getDeclaringClass() | |||
+ ". This breaks the JavaBeans " | |||
+ "specification and can cause unpredicatble results."); | |||
} | |||
addSetMethod(propName, setter); | |||
} | |||
@@ -292,8 +295,8 @@ public final class PoiReflectorUtil { | |||
public Method getGetMethod(String propertyName) { | |||
Method method = getMethods.get(propertyName); | |||
if (method == null) { | |||
throw new RuntimeException("There is no getter for property named '" + propertyName | |||
+ "' in '" + type + "'"); | |||
throw new RuntimeException( | |||
"There is no getter for property named '" + propertyName + "' in '" + type + "'"); | |||
} | |||
return method; | |||
} | |||
@@ -301,8 +304,8 @@ public final class PoiReflectorUtil { | |||
public Method getSetMethod(String propertyName) { | |||
Method method = setMethods.get(propertyName); | |||
if (method == null) { | |||
throw new RuntimeException("There is no getter for property named '" + propertyName | |||
+ "' in '" + type + "'"); | |||
throw new RuntimeException( | |||
"There is no getter for property named '" + propertyName + "' in '" + type + "'"); | |||
} | |||
return method; | |||
} | |||
@@ -55,8 +55,8 @@ public class WordExportUtil { | |||
* 解析数据源 | |||
* @return | |||
*/ | |||
public static void exportWord07(XWPFDocument document, Map<String, Object> map) | |||
throws Exception { | |||
public static void exportWord07(XWPFDocument document, | |||
Map<String, Object> map) throws Exception { | |||
new ParseWord07().parseWord(document, map); | |||
} | |||
@@ -45,8 +45,7 @@ public class MyXWPFDocument extends XWPFDocument { | |||
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" | |||
+ " <pic:nvPicPr>" | |||
+ " <pic:cNvPr id=\"%s\" name=\"Generated\"/>" | |||
+ " <pic:cNvPicPr/>" | |||
+ " </pic:nvPicPr>" | |||
+ " <pic:cNvPicPr/>" + " </pic:nvPicPr>" | |||
+ " <pic:blipFill>" | |||
+ " <a:blip r:embed=\"%s\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" | |||
+ " <a:stretch>" | |||
@@ -57,10 +56,9 @@ public class MyXWPFDocument extends XWPFDocument { | |||
+ " <a:ext cx=\"%s\" cy=\"%s\"/>" | |||
+ " </a:xfrm>" | |||
+ " <a:prstGeom prst=\"rect\">" | |||
+ " <a:avLst/>" | |||
+ " </a:prstGeom>" + " </pic:spPr>" | |||
+ " </pic:pic>" + " </a:graphicData>" | |||
+ "</a:graphic>"; | |||
+ " <a:avLst/>" + " </a:prstGeom>" | |||
+ " </pic:spPr>" + " </pic:pic>" | |||
+ " </a:graphicData>" + "</a:graphic>"; | |||
public MyXWPFDocument() { | |||
super(); | |||
@@ -57,12 +57,15 @@ public class ExcelListEntity extends ExcelBaseParams { | |||
this.clazz = clazz; | |||
setDataHanlder(dataHanlder); | |||
} | |||
public ExcelListEntity(List<?> list, Class<?> clazz, IExcelDataHandler dataHanlder, int headRows) { | |||
public ExcelListEntity(List<?> list, Class<?> clazz, IExcelDataHandler dataHanlder, | |||
int headRows) { | |||
this.list = list; | |||
this.clazz = clazz; | |||
this.headRows = headRows; | |||
setDataHanlder(dataHanlder); | |||
} | |||
public ExcelListEntity(List<?> list, Class<?> clazz, int headRows) { | |||
this.list = list; | |||
this.clazz = clazz; | |||
@@ -100,8 +100,8 @@ public class ExcelEntityParse extends ExportBase { | |||
* @param styles | |||
*/ | |||
public void createListCells(int index, int cellNum, Object obj, | |||
List<ExcelExportEntity> excelParams, XWPFTable table) | |||
throws Exception { | |||
List<ExcelExportEntity> excelParams, | |||
XWPFTable table) throws Exception { | |||
ExcelExportEntity entity; | |||
XWPFTableRow row; | |||
if (table.getRow(index) == null) { | |||
@@ -183,9 +183,11 @@ public class ExcelEntityParse extends ExportBase { | |||
private void setCellValue(XWPFTableRow row, Object value, int cellNum) { | |||
if (row.getCell(cellNum++) != null) { | |||
row.getCell(cellNum - 1).setText(value == null ? "" : value.toString()); | |||
PoiPublicUtil.setWordText(row.createCell().addParagraph().createRun(),value == null ? "" : value.toString()); | |||
PoiPublicUtil.setWordText(row.createCell().addParagraph().createRun(), | |||
value == null ? "" : value.toString()); | |||
} else { | |||
PoiPublicUtil.setWordText(row.createCell().addParagraph().createRun(),value == null ? "" : value.toString()); | |||
PoiPublicUtil.setWordText(row.createCell().addParagraph().createRun(), | |||
value == null ? "" : value.toString()); | |||
} | |||
} | |||
@@ -82,12 +82,13 @@ public final class ExcelMapParse { | |||
for (cellIndex = 0; cellIndex < currentRow.getTableCells().size(); cellIndex++) { | |||
String val = eval(params[cellIndex], tempMap).toString(); | |||
currentRow.getTableCells().get(cellIndex).setText(""); | |||
PoiPublicUtil.setWordText(currentRow.getTableCells().get(cellIndex).addParagraph().createRun(),val); | |||
PoiPublicUtil.setWordText( | |||
currentRow.getTableCells().get(cellIndex).addParagraph().createRun(), val); | |||
} | |||
for (; cellIndex < params.length; cellIndex++) { | |||
String val = eval(params[cellIndex], tempMap).toString(); | |||
PoiPublicUtil.setWordText(currentRow.createCell().addParagraph().createRun(),val); | |||
PoiPublicUtil.setWordText(currentRow.createCell().addParagraph().createRun(), val); | |||
} | |||
} | |||