@@ -1,13 +1,14 @@ | |||||
apply plugin: "java" | apply plugin: "java" | ||||
apply plugin: "eclipse" | |||||
description = '' | description = '' | ||||
dependencies { | dependencies { | ||||
compile group: 'org.apache.poi', name: 'poi', version:'3.9' | |||||
compile group: 'org.apache.poi', name: 'poi-ooxml', version:'3.9' | |||||
compile(group: 'org.apache.poi', name: 'poi-ooxml-schemas', version:'3.9') { | |||||
compile group: 'org.apache.poi', name: 'poi', version:'3.10-FINAL' | |||||
compile group: 'org.apache.poi', name: 'poi-ooxml', version:'3.10-FINAL' | |||||
compile(group: 'org.apache.poi', name: 'poi-ooxml-schemas', version:'3.10-FINAL') { | |||||
exclude(module: 'xercesImpl') | exclude(module: 'xercesImpl') | ||||
} | } | ||||
compile group: 'xerces', name: 'xercesImpl', version:'2.9.1' | compile group: 'xerces', name: 'xercesImpl', version:'2.9.1' | ||||
compile group: 'org.apache.poi', name: 'poi-scratchpad', version:'3.9' | |||||
compile group: 'org.apache.poi', name: 'poi-scratchpad', version:'3.10-FINAL' | |||||
compile group: 'com.itextpdf', name: 'itextpdf', version:'5.5.6' | compile group: 'com.itextpdf', name: 'itextpdf', version:'5.5.6' | ||||
compile group: 'com.itextpdf', name: 'itext-asian', version:'5.2.0' | compile group: 'com.itextpdf', name: 'itext-asian', version:'5.2.0' | ||||
compile group: 'com.google.guava', name: 'guava', version:'16.0.1' | compile group: 'com.google.guava', name: 'guava', version:'16.0.1' | ||||
@@ -86,7 +86,14 @@ public class ExportParams extends ExcelBaseParams { | |||||
* 是否创建表头 | * 是否创建表头 | ||||
*/ | */ | ||||
private boolean isCreateHeadRows = true; | private boolean isCreateHeadRows = true; | ||||
/** | |||||
* 是否动态获取数据 | |||||
*/ | |||||
private boolean isDynamicData = false; | |||||
/** | |||||
* 是否追加图形 | |||||
*/ | |||||
private boolean isAppendGraph = true; | |||||
public ExportParams() { | public ExportParams() { | ||||
} | } | ||||
@@ -220,4 +227,24 @@ public class ExportParams extends ExcelBaseParams { | |||||
this.isCreateHeadRows = isCreateHeadRows; | this.isCreateHeadRows = isCreateHeadRows; | ||||
} | } | ||||
public boolean isDynamicData() | |||||
{ | |||||
return isDynamicData; | |||||
} | |||||
public void setDynamicData(boolean isDynamicData) | |||||
{ | |||||
this.isDynamicData = isDynamicData; | |||||
} | |||||
public boolean isAppendGraph() | |||||
{ | |||||
return isAppendGraph; | |||||
} | |||||
public void setAppendGraph(boolean isAppendGraph) | |||||
{ | |||||
this.isAppendGraph = isAppendGraph; | |||||
} | |||||
} | } |
@@ -18,6 +18,8 @@ package org.jeecgframework.poi.excel.entity.params; | |||||
import java.lang.reflect.Method; | import java.lang.reflect.Method; | ||||
import java.util.List; | import java.util.List; | ||||
import org.jeecgframework.poi.excel.entity.vo.BaseEntityTypeConstants; | |||||
/** | /** | ||||
* Excel 导入导出基础对象类 | * Excel 导入导出基础对象类 | ||||
* @author JueYue | * @author JueYue | ||||
@@ -31,7 +33,7 @@ public class ExcelBaseEntity { | |||||
/** | /** | ||||
* 对应type | * 对应type | ||||
*/ | */ | ||||
private int type = 1; | |||||
private int type = BaseEntityTypeConstants.StringType; | |||||
/** | /** | ||||
* 数据库格式 | * 数据库格式 | ||||
*/ | */ | ||||
@@ -0,0 +1,18 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.entity.vo; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2015-12-28 | |||||
* @version 1.0 | |||||
* @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; | |||||
} |
@@ -39,6 +39,7 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString; | |||||
import org.jeecgframework.poi.cache.ImageCache; | import org.jeecgframework.poi.cache.ImageCache; | ||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | ||||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | ||||
import org.jeecgframework.poi.excel.entity.vo.BaseEntityTypeConstants; | |||||
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | ||||
import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler; | import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler; | ||||
import org.jeecgframework.poi.util.PoiMergeCellUtil; | import org.jeecgframework.poi.util.PoiMergeCellUtil; | ||||
@@ -102,7 +103,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
} | } | ||||
} else { | } else { | ||||
Object value = getCellValue(entity, t); | Object value = getCellValue(entity, t); | ||||
if (entity.getType() == 1) { | |||||
if (entity.getType() == BaseEntityTypeConstants.StringType) { | |||||
createStringCell(row, cellNum++, value == null ? "" : value.toString(), | createStringCell(row, cellNum++, value == null ? "" : value.toString(), | ||||
index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | ||||
entity); | entity); | ||||
@@ -112,7 +113,19 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
row.getSheet().getWorkbook().getCreationHelper(), t, | row.getSheet().getWorkbook().getCreationHelper(), t, | ||||
entity.getName(), value)); | 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++, | createImageCell(patriarch, entity, row, cellNum++, | ||||
value == null ? "" : value.toString(), t); | value == null ? "" : value.toString(), t); | ||||
} | } | ||||
@@ -209,7 +222,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { | for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { | ||||
entity = excelParams.get(k); | entity = excelParams.get(k); | ||||
Object value = getCellValue(entity, obj); | Object value = getCellValue(entity, obj); | ||||
if (entity.getType() == 1) { | |||||
if (entity.getType() == BaseEntityTypeConstants.StringType) { | |||||
createStringCell(row, cellNum++, value == null ? "" : value.toString(), | createStringCell(row, cellNum++, value == null ? "" : value.toString(), | ||||
row.getRowNum() % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | row.getRowNum() % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), | ||||
entity); | entity); | ||||
@@ -219,7 +232,19 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), | row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), | ||||
value)); | 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++, | createImageCell(patriarch, entity, row, cellNum++, | ||||
value == null ? "" : value.toString(), obj); | value == null ? "" : value.toString(), obj); | ||||
} | } | ||||
@@ -255,7 +280,32 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
} | } | ||||
addStatisticsData(index, text, entity); | addStatisticsData(index, text, entity); | ||||
} | } | ||||
/** | |||||
* 创建数字类型的Cell | |||||
* | |||||
* @param row | |||||
* @param index | |||||
* @param text | |||||
* @param style | |||||
* @param entity | |||||
*/ | |||||
public void createDoubleCell(Row row, int index, String text, CellStyle style, | |||||
ExcelExportEntity entity) { | |||||
Cell cell = row.createCell(index); | |||||
if(text!=null&&text.length()>0){ | |||||
cell.setCellValue(Double.parseDouble(text)); | |||||
}else{ | |||||
cell.setCellValue(-1); | |||||
} | |||||
cell.setCellType(Cell.CELL_TYPE_NUMERIC); | |||||
if (style != null) { | |||||
cell.setCellStyle(style); | |||||
} | |||||
addStatisticsData(index, text, entity); | |||||
} | |||||
/** | /** | ||||
* 创建统计行 | * 创建统计行 | ||||
* @param styles | * @param styles | ||||
@@ -0,0 +1,262 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph.builder; | |||||
import java.util.List; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.apache.poi.ss.usermodel.Chart; | |||||
import org.apache.poi.ss.usermodel.ClientAnchor; | |||||
import org.apache.poi.ss.usermodel.Drawing; | |||||
import org.apache.poi.ss.usermodel.Sheet; | |||||
import org.apache.poi.ss.usermodel.Workbook; | |||||
import org.apache.poi.ss.usermodel.charts.AxisCrosses; | |||||
import org.apache.poi.ss.usermodel.charts.AxisPosition; | |||||
import org.apache.poi.ss.usermodel.charts.ChartAxis; | |||||
import org.apache.poi.ss.usermodel.charts.ChartDataSource; | |||||
import org.apache.poi.ss.usermodel.charts.ChartLegend; | |||||
import org.apache.poi.ss.usermodel.charts.DataSources; | |||||
import org.apache.poi.ss.usermodel.charts.LegendPosition; | |||||
import org.apache.poi.ss.usermodel.charts.LineChartData; | |||||
import org.apache.poi.ss.usermodel.charts.ScatterChartData; | |||||
import org.apache.poi.ss.usermodel.charts.ValueAxis; | |||||
import org.apache.poi.ss.util.CellRangeAddress; | |||||
import org.jeecgframework.poi.excel.graph.constant.ExcelGraphElementType; | |||||
import org.jeecgframework.poi.excel.graph.constant.ExcelGraphType; | |||||
import org.jeecgframework.poi.excel.graph.entity.ExcelGraph; | |||||
import org.jeecgframework.poi.excel.graph.entity.ExcelGraphElement; | |||||
import org.jeecgframework.poi.excel.graph.entity.ExcelTitleCell; | |||||
import org.jeecgframework.poi.util.PoiCellUtil; | |||||
import org.jeecgframework.poi.util.PoiExcelGraphDataUtil; | |||||
import com.google.common.collect.Lists; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2015-12-30 | |||||
* @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); | |||||
ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT); | |||||
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); | |||||
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())); | |||||
} | |||||
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.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); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph.constant; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2015-12-30 | |||||
* @version 1.0 | |||||
* 定义元素类型 | |||||
*/ | |||||
public interface ExcelGraphElementType | |||||
{ | |||||
public static final Integer StringType=1; | |||||
public static final Integer NumericType=2; | |||||
} |
@@ -0,0 +1,17 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph.constant; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2015-12-30 | |||||
* @version 1.0 | |||||
* 定义图形类型 | |||||
*/ | |||||
public interface ExcelGraphType | |||||
{ | |||||
public static final Integer LineChart=1; | |||||
public static final Integer ScatterChart=2; | |||||
} |
@@ -0,0 +1,22 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph.entity; | |||||
import java.util.List; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2016-1-7 | |||||
* @version 1.0 | |||||
* @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(); | |||||
} |
@@ -0,0 +1,70 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph.entity; | |||||
import java.util.List; | |||||
import org.jeecgframework.poi.excel.graph.constant.ExcelGraphType; | |||||
import com.google.common.collect.Lists; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2015-12-30 | |||||
* @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 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; | |||||
} | |||||
} |
@@ -0,0 +1,64 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
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; | |||||
} | |||||
} |
@@ -0,0 +1,44 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph.entity; | |||||
/** | |||||
* @author xfowrld | |||||
* @since 2015-12-30 | |||||
* @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; | |||||
} | |||||
} |
@@ -0,0 +1,10 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
/** | |||||
* @author xfworld | |||||
* @since 2016-1-13 | |||||
* @version 1.0 | |||||
* Excel 图形构造服务 | |||||
*/ | |||||
package org.jeecgframework.poi.excel.graph; |
@@ -0,0 +1,55 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.util; | |||||
import java.util.List; | |||||
import org.apache.poi.ss.usermodel.Sheet; | |||||
import org.jeecgframework.poi.excel.graph.entity.ExcelGraph; | |||||
import org.jeecgframework.poi.excel.graph.entity.ExcelGraphElement; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2016-1-4 | |||||
* @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); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -28,7 +28,7 @@ public interface MapExcelConstants extends BasePOIConstants { | |||||
/** | /** | ||||
* Entity List | * Entity List | ||||
*/ | */ | ||||
public final static String ENTITY_LIST = "data"; | |||||
public final static String ENTITY_LIST = "EntityList"; | |||||
/** | /** | ||||
* 数据列表 | * 数据列表 | ||||
*/ | */ | ||||
@@ -0,0 +1,19 @@ | |||||
/** | |||||
* | |||||
*/ | |||||
package org.jeecgframework.poi.excel.entity.vo; | |||||
/** | |||||
* @author xfworld | |||||
* @since 2015-12-31 | |||||
* @version 1.0 | |||||
* | |||||
*/ | |||||
public interface MapExcelGraphConstants extends MapExcelConstants | |||||
{ | |||||
public final static String MAP_GRAPH_EXCEL_VIEW = "MapGraphExcelView"; | |||||
public final static String GRAPH_DEFINED = "graphDefined"; | |||||
} |
@@ -0,0 +1,82 @@ | |||||
/** | |||||
* Copyright 2013-2015 xfworld (xfworld@gmail.com) | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package org.jeecgframework.poi.excel.view; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import javax.annotation.Resource; | |||||
import javax.servlet.ServletOutputStream; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||||
import org.apache.poi.ss.usermodel.Workbook; | |||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | |||||
import org.jeecgframework.poi.excel.entity.ExportParams; | |||||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||||
import org.jeecgframework.poi.excel.entity.vo.MapExcelGraphConstants; | |||||
import org.jeecgframework.poi.excel.graph.builder.ExcelChartBuildService; | |||||
import org.jeecgframework.poi.excel.graph.entity.ExcelGraph; | |||||
import org.jeecgframework.poi.excel.view.MiniAbstractExcelView; | |||||
import org.springframework.stereotype.Controller; | |||||
/** | |||||
* Map 对象接口 | |||||
* | |||||
* @author xfworld | |||||
* @since 2016-01-04 | |||||
*/ | |||||
@SuppressWarnings("unchecked") | |||||
@Controller(MapExcelGraphConstants.MAP_GRAPH_EXCEL_VIEW) | |||||
public class MapGraphExcelView extends MiniAbstractExcelView { | |||||
public MapGraphExcelView() { | |||||
super(); | |||||
} | |||||
@Override | |||||
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, | |||||
HttpServletResponse response) throws Exception { | |||||
String codedFileName = "临时文件"; | |||||
ExportParams params=(ExportParams)model.get(MapExcelGraphConstants.PARAMS); | |||||
List<ExcelExportEntity> entityList=(List<ExcelExportEntity>) model.get(MapExcelGraphConstants.ENTITY_LIST); | |||||
List<Map<String, Object>> mapList=(List<Map<String, Object>>)model.get(MapExcelGraphConstants.MAP_LIST); | |||||
List<ExcelGraph> graphDefinedList=(List<ExcelGraph>)model.get(MapExcelGraphConstants.GRAPH_DEFINED); | |||||
//构建数据 | |||||
Workbook workbook = ExcelExportUtil.exportExcel(params,entityList,mapList); | |||||
ExcelChartBuildService.createExcelChart(workbook,graphDefinedList, params.isDynamicData(), params.isAppendGraph()); | |||||
if (model.containsKey(MapExcelGraphConstants.FILE_NAME)) { | |||||
codedFileName = (String) model.get(MapExcelGraphConstants.FILE_NAME); | |||||
} | |||||
if (workbook instanceof HSSFWorkbook) { | |||||
codedFileName += HSSF; | |||||
} else { | |||||
codedFileName += XSSF; | |||||
} | |||||
if (isIE(request)) { | |||||
codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
} else { | |||||
codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1"); | |||||
} | |||||
response.setHeader("content-disposition", "attachment;filename=" + codedFileName); | |||||
ServletOutputStream out = response.getOutputStream(); | |||||
workbook.write(out); | |||||
out.flush(); | |||||
} | |||||
} |
@@ -39,7 +39,7 @@ | |||||
<properties> | <properties> | ||||
<sub.version>2.1.7-SNAPSHOT</sub.version> | <sub.version>2.1.7-SNAPSHOT</sub.version> | ||||
<poi.version>3.9</poi.version> | |||||
<poi.version>3.10-FINAL</poi.version> | |||||
<xerces.version>2.9.1</xerces.version> | <xerces.version>2.9.1</xerces.version> | ||||
<guava.version>16.0.1</guava.version> | <guava.version>16.0.1</guava.version> | ||||
<commons-lang.version>3.2.1</commons-lang.version> | <commons-lang.version>3.2.1</commons-lang.version> | ||||