现有需求, 根据数据库数据, 定期更新 ppt 报表内容
本文修改内容 主要是 ppt中的图表;
测试ppt:
代码:
package org.springblade.bigdata.ureport.service.impl;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.xslf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTable;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTableProperties;
/**
* PPT图表测试类
*
* @author cy
*/
public class PPTGraphDemo {
public static void main(String[] args) {
// String basePath = System.getProperty("user.dir") + File.separator + "testFile";
String templateFile = "G:/sdl/test.pptx";
String destFile = "G:/sdl/dest.pptx";
System.out.println("templateFile" + templateFile + " destFile:" + destFile);
String result = createNewPPT(templateFile, destFile);
System.out.println(result);
}
public static String createNewPPT(String templateFile, String destFile) {
String result = "success";
XMLSlideShow pptx = null;
try {
InputStream is = new FileInputStream(new File(templateFile));
// InputStream resourceAsStream = PPTGraphDemo.class.getResourceAsStream("/templates/demo.pptx");
// 打开模板ppt
pptx = new XMLSlideShow(is);
// 打印ppt中的图表信息
PPTGrapthUtils.judgeGraphSheetType(pptx);
// 获取ppt中的每一页幻灯片并遍历
for (XSLFSlide slide : pptx.getSlides()) {
/* List<XSLFShape> shapes = slide.getShapes();
for (XSLFShape shape : shapes) {
if (shape instanceof XSLFTable) {
System.out.println("我是表格哎");
XSLFSheet sheet = ((XSLFTable) shape).getSheet();
List<XSLFTableRow> rows = ((XSLFTable) shape).getRows();
for (int x = 0; x < rows.size(); x++) {
List<XSLFTableCell> cells = rows.get(x).getCells();
for (int y = 0; y < cells.size(); y++) {
String text = cells.get(y).getText();
System.out.println(text);
XSLFTableCell xslfTextParagraphs = cells.get(y);
xslfTextParagraphs.setText("sss");
}
}
}
}*/
// 维护图表数据
chartData(slide);
}
// 保存文件
OutputStream out = new FileOutputStream(destFile);
pptx.write(out);
out.close();
} catch (Exception e) {
result = e.toString();
} finally {
if (pptx != null) {
try {
pptx.close();
} catch (IOException e) {
result = e.toString();
}
}
}
return result;
}
/**
* 图表数据更新
* @param slide
*/
public static void chartData(XSLFSlide slide){
// 获取当前幻灯片中的 Document
for (POIXMLDocumentPart part : slide.getRelations()) {
// 判断 Document 是否是图表类型
if (part instanceof XSLFChart) {
// 判断图表类型
List<String> graphType = PPTGrapthUtils.getGraphType((XSLFChart) part);
graphType.stream().forEach(type->{
switch (type){
case "pie" : {
// 获取饼图数据
GraphData graphData = getGraphData();
// 更新数据
PPTGrapthUtils.refreshPieGraph((XSLFChart) part, graphData);
break;
}
case "bar" : {
// 获取柱状图数据
// GraphData graphData = getGraphData();
Map<String, List<SeriesData>> graphDataMap = getGraphDataMap();
// 更新数据
PPTGrapthUtils.refreshBarGraph((XSLFChart) part, graphDataMap);
break;
}
case "line" : {
// 获取线形图数据
Map<String, List<SeriesData>> graphDataMap = getGraphDataMap();
// 更新数据
PPTGrapthUtils.refreshLineGraph((XSLFChart) part, graphDataMap);
break;
}
case "area" : {
// 获取面积图数据
GraphData graphData = getGraphData();
// 更新数据
PPTGrapthUtils.refreshAreaGraph((XSLFChart) part, graphData);
break;
}
default: break;
}
});
}
}
}
private static GraphData getGraphData() {
List<SeriesData> dataList = new ArrayList<SeriesData>();
SeriesData seriesData = new SeriesData("优", 10);
dataList.add(seriesData);
seriesData = new SeriesData("中", 150);
dataList.add(seriesData);
seriesData = new SeriesData("及格", 80);
dataList.add(seriesData);
seriesData = new SeriesData("不及格", 20);
dataList.add(seriesData);
GraphData graphData = new GraphData("一班", dataList);
return graphData;
}
/**
* sdl
* @return
*/
private static Map<String,List<SeriesData>> getGraphDataMap() {
List<SeriesData> dataList = new ArrayList<SeriesData>();
SeriesData seriesData = new SeriesData("优", 10);
dataList.add(seriesData);
seriesData = new SeriesData("中", 150);
dataList.add(seriesData);
seriesData = new SeriesData("及格", 80);
dataList.add(seriesData);
seriesData = new SeriesData("不及格", 20);
dataList.add(seriesData);
List<SeriesData> dataList1 = new ArrayList<SeriesData>();
SeriesData seriesData1 = new SeriesData("优", 20);
dataList1.add(seriesData1);
seriesData1 = new SeriesData("中", 160);
dataList1.add(seriesData1);
seriesData1 = new SeriesData("及格", 70);
dataList1.add(seriesData1);
seriesData1 = new SeriesData("不及格", 40);
dataList1.add(seriesData1);
List<SeriesData> dataList2 = new ArrayList<SeriesData>();
SeriesData seriesData2 = new SeriesData("优", 50);
dataList2.add(seriesData2);
seriesData2 = new SeriesData("中", 80);
dataList2.add(seriesData2);
seriesData2 = new SeriesData("及格", 30);
dataList2.add(seriesData2);
seriesData2 = new SeriesData("不及格", 90);
dataList2.add(seriesData2);
Map<String,List<SeriesData>> resMap = new HashMap<>();
resMap.put("一班",dataList);
resMap.put("二班",dataList1);
resMap.put("三班",dataList2);
return resMap;
}
}
package org.springblade.bigdata.ureport.service.impl;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFChart;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrData;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal;
import org.springblade.core.tool.utils.Func;
/**
* PPT公具类
*
* @author CAOYONG
*/
public class PPTGrapthUtils {
public static void updateGraph(XSLFChart chart, GraphData graphData, String type) {
if ("pie".equalsIgnoreCase(type)) {
PPTGrapthUtils.refreshPieGraph(chart, graphData);
} else if ("bar".equalsIgnoreCase(type)) {
refreshBarGraph(chart, graphData);
} else if ("line".equalsIgnoreCase(type)) {
refreshLineGraph(chart, graphData);
} else if ("area".equalsIgnoreCase(type)) {
refreshAreaGraph(chart, graphData);
}
System.out.println("updateGraph type:" + type);
}
/**
* 判断PPT图表类型(注意需要依赖:ooxml-schemas-1.1.jar)
*
* @param pptx
*/
public static void judgeGraphSheetType(XMLSlideShow pptx) {
int pageIdx = 1;
for (XSLFSlide slide : pptx.getSlides()) {
for (POIXMLDocumentPart part : slide.getRelations()) {
if (part instanceof XSLFChart) {
XSLFChart chart = (XSLFChart) part;
CTPlotArea plot = chart.getCTChart().getPlotArea();
judgeGraphSheetType(plot, pageIdx);
}
}
pageIdx++;
}
}
// 具体判断
private static void judgeGraphSheetType(CTPlotArea plot, int pageIdx) {
StringBuffer infos = new StringBuffer();
if (null != plot && plot.getBarChartList().size() > 0) {
infos.append("pageIdx:" + pageIdx + " has 柱状图");
infos.append(" DetailInfo: \n ");
for (CTBarSer ser : plot.getBarChartList().get(0).getSerList()) {
infos.append(getGraphTitle(ser.getTx()));
infos.append(" ");
String info = getGraphDetailInfo(ser.getCat());
ser.getTx();
if (info.length() > 0) {
infos.append(info + "\n");
}
}
} else if (null != plot && plot.getPieChartList().size() > 0) {
infos.append("pageIdx:" + pageIdx + " has 圆饼图");
infos.append(" DetailInfo: \n ");
for (CTPieSer ser : plot.getPieChartList().get(0).getSerList()) {
infos.append(getGraphTitle(ser.getTx()));
infos.append(" ");
String info = getGraphDetailInfo(ser.getCat());
if (info.length() > 0) {
infos.append(info + "\n");
}
}
} else if (null != plot && plot.getLineChartList().size() > 0) {
infos.append("pageIdx:" + pageIdx + " has 线性图");
infos.append(" DetailInfo: \n ");
for (CTLineSer ser : plot.getLineChartList().get(0).getSerList()) {
infos.append(getGraphTitle(ser.getTx()));
infos.append(" ");
String info = getGraphDetailInfo(ser.getCat());
if (info.length() > 0) {
infos.append(info + "\n");
}
}
} else if (null != plot && plot.getAreaChartList().size() > 0) {
infos.append("pageIdx:" + pageIdx + " has 面积图");
infos.append(" DetailInfo: \n ");
for (CTAreaSer ser : plot.getAreaChartList().get(0).getSerList()) {
infos.append(getGraphTitle(ser.getTx()));
infos.append(" ");
String info = getGraphDetailInfo(ser.getCat());
if (info.length() > 0) {
infos.append(info + "\n");
}
}
}
// 还可以判断其它图
System.out.println(infos.toString());
}
// 得到图表标题
private static String getGraphTitle(CTSerTx tx) {
StringBuilder infos = new StringBuilder();
if (null != tx && null != tx.getStrRef()) {
for (CTStrVal val : tx.getStrRef().getStrCache().getPtList()) {
infos.append("Title ID:" + val.getIdx() + " V:" + val.getV());
}
infos.append("\n");
}
return infos.toString();
}
// 得到第系值
private static String getGraphDetailInfo(CTAxDataSource cat) {
StringBuilder infos = new StringBuilder();
if (null != cat && null != cat.getStrRef()) {
for (CTStrVal val : cat.getStrRef().getStrCache().getPtList()) {
infos.append("ser ID:" + val.getIdx() + " V:" + val.getV());
}
}
return infos.toString();
}
/**
* 通过图表类型
*
* @param chart
* @return
*/
public static List<String> getGraphType(XSLFChart chart) {
List<String> resList = new ArrayList<>();
CTPlotArea plot = chart.getCTChart().getPlotArea();
if (null != plot && plot.getBarChartList().size() > 0) {
resList.add("bar");
}
if (null != plot && plot.getPieChartList().size() > 0) {
resList.add("pie");
}
if (null != plot && plot.getLineChartList().size() > 0) {
resList.add("line");
}
if (null != plot && plot.getAreaChartList().size() > 0) {
resList.add("area");
}
return resList;
}
// 刷新圆饼图
public static boolean refreshPieGraph(XSLFChart chart, GraphData graphData) {
boolean result = true;
// 把图表绑定到Excel workbook中
try {
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
CTPieChart pieChart = plotArea.getPieChartArray(0);
// 获取图表的系列
CTPieSer ser = pieChart.getSerArray(0);
// Series Text
CTSerTx tx = ser.getTx();
tx.getStrRef().getStrCache().getPtArray(0).setV(graphData.getTitle());
sheet.createRow(0).createCell(1).setCellValue(graphData.getTitle());
String titleRef = new CellReference(sheet.getSheetName(), 0, 1, true, true).formatAsString();
tx.getStrRef().setF(titleRef);
// Category Axis Data
CTAxDataSource cat = ser.getCat();
// 获取图表的值
CTNumDataSource val = ser.getVal();
refreshGraphContent(sheet, cat, val, graphData);
// 更新嵌入的workbook
POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
try {
wb.write(xlsOut);
xlsOut.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 刷新柱状图
public static boolean refreshBarGraph(XSLFChart chart, GraphData graphData) {
boolean result = true;
// 把图表绑定到Excel workbook中
try {
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
CTBarChart[] areaChartArray = plotArea.getBarChartArray();
for (CTBarChart barChart : areaChartArray) {
// 获取图表的系列
CTBarSer ser = barChart.getSerArray(0);
// Series Text
CTSerTx tx = ser.getTx();
tx.getStrRef().getStrCache().getPtArray(0).setV(graphData.getTitle());
sheet.createRow(0).createCell(1).setCellValue(graphData.getTitle());
String titleRef = new CellReference(sheet.getSheetName(), 0, 1, true, true).formatAsString();
tx.getStrRef().setF(titleRef);
// Category Axis Data
CTAxDataSource cat = ser.getCat();
// 获取图表的值
CTNumDataSource val = ser.getVal();
refreshGraphContent(sheet, cat, val, graphData);
}
// 更新嵌入的workbook
POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
try {
wb.write(xlsOut);
xlsOut.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 刷新线性图
public static boolean refreshLineGraph(XSLFChart chart, GraphData graphData) {
boolean result = true;
// 把图表绑定到Excel workbook中
try {
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
CTLineChart pieChart = plotArea.getLineChartArray(0);
// 获取图表的系列
CTLineSer ser = pieChart.getSerArray(0);
// Series Text
CTSerTx tx = ser.getTx();
tx.getStrRef().getStrCache().getPtArray(0).setV(graphData.getTitle());
sheet.createRow(0).createCell(1).setCellValue(graphData.getTitle());
String titleRef = new CellReference(sheet.getSheetName(), 0, 1, true, true).formatAsString();
tx.getStrRef().setF(titleRef);
// Category Axis Data
CTAxDataSource cat = ser.getCat();
// 获取图表的值
CTNumDataSource val = ser.getVal();
refreshGraphContent(sheet, cat, val, graphData);
// 更新嵌入的workbook
POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
try {
wb.write(xlsOut);
xlsOut.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* sdl 刷新线性图
* @param chart
* @param graphData
* @return
*/
public static boolean refreshLineGraph(XSLFChart chart, Map<String, List<SeriesData>> graphData) {
boolean result = true;
// 把图表绑定到Excel workbook中
try {
Set<String> keySet = graphData.keySet();
ArrayList<String> keyList = new ArrayList<>(keySet);
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
List<CTLineChart> lineChartList = plotArea.getLineChartList();
for (int j = 0; j < lineChartList.size(); j++) {
CTLineChart pieChart = plotArea.getLineChartArray(j);
for (int x = 0; x < 10; x++) {
sheet.createRow(x);
}
List<CTLineSer> serList = pieChart.getSerList();
for (int i = 0; i < serList.size(); i++) {
// 获取图表的系列
// Series Text
CTLineSer ser = serList.get(i);
CTSerTx tx = ser.getTx();
// CTStrVal ptArray = tx.getStrRef().getStrCache().getPtArray(0);
// String v = ptArray.getV();
String v = keyList.get(i);
List<SeriesData> seriesData = graphData.get(keyList.get(i));
// List<SeriesData> seriesData = graphData.get(v);
if (Func.isEmpty(seriesData)) {
continue;
}
sheet.getRow(0).createCell(i+1).setCellValue(v);
String titleRef = new CellReference(sheet.getSheetName(), 0, i+1, true, true).formatAsString();
tx.getStrRef().setF(titleRef);
// Category Axis Data
CTAxDataSource cat = ser.getCat();
// 获取图表的值
CTNumDataSource val = ser.getVal();
refreshGraphContent(sheet, cat,val,i+1, seriesData);
}
}
// 更新嵌入的workbook
POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
try {
wb.write(xlsOut);
xlsOut.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* sdl 刷新柱状图
* @param chart
* @param graphData
* @return
*/
public static boolean refreshBarGraph(XSLFChart chart, Map<String, List<SeriesData>> graphData) {
boolean result = true;
// 把图表绑定到Excel workbook中
try {
Set<String> keySet = graphData.keySet();
ArrayList<String> keyList = new ArrayList<>(keySet);
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
List<CTBarChart> barChartList = plotArea.getBarChartList();
for (int j = 0; j < barChartList.size(); j++) {
CTBarChart barChartArray = plotArea.getBarChartArray(j);
List<CTBarSer> serList = barChartArray.getSerList();
for (int x = 0; x < 10; x++) {
sheet.createRow(x);
}
for (int i = 0; i < serList.size(); i++) {
// 获取图表的系列
CTBarSer ser = serList.get(i);
// Series Text
CTSerTx tx = ser.getTx();
// CTStrVal ptArray = tx.getStrRef().getStrCache().getPtArray(0);
// String v = ptArray.getV();
String v = keyList.get(i);
List<SeriesData> seriesData = graphData.get(v);
if (Func.isEmpty(seriesData)) {
continue;
}
sheet.getRow(0).createCell(i+1).setCellValue(v);
String titleRef = new CellReference(sheet.getSheetName(), 0, i+1, true, true).formatAsString();
tx.getStrRef().setF(titleRef);
// Category Axis Data
CTAxDataSource cat = ser.getCat();
// 获取图表的值
CTNumDataSource val = ser.getVal();
refreshGraphContent(sheet, cat, val,i+1, seriesData);
}
}
// 更新嵌入的workbook
POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
try {
wb.write(xlsOut);
xlsOut.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 刷新面积图
public static boolean refreshAreaGraph(XSLFChart chart, GraphData graphData) {
boolean result = true;
// 把图表绑定到Excel workbook中
try {
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
CTChart ctChart = chart.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
CTAreaChart pieChart = plotArea.getAreaChartArray(0);
// 获取图表的系列
CTAreaSer ser = pieChart.getSerArray(0);
// Series Text
CTSerTx tx = ser.getTx();
tx.getStrRef().getStrCache().getPtArray(0).setV(graphData.getTitle());
sheet.createRow(0).createCell(1).setCellValue(graphData.getTitle());
String titleRef = new CellReference(sheet.getSheetName(), 0, 1, true, true).formatAsString();
tx.getStrRef().setF(titleRef);
// Category Axis Data
CTAxDataSource cat = ser.getCat();
// 获取图表的值
CTNumDataSource val = ser.getVal();
refreshGraphContent(sheet, cat, val, graphData);
// 更新嵌入的workbook
POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
try {
wb.write(xlsOut);
xlsOut.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
result = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 刷新图表内容
public static void refreshGraphContent(Sheet sheet, CTAxDataSource cat, CTNumDataSource val, GraphData graphData) {
CTStrData strData = cat.getStrRef().getStrCache();
CTNumData numData = val.getNumRef().getNumCache();
// strData.set
strData.setPtArray((CTStrVal[]) null); // unset old axis text
numData.setPtArray((CTNumVal[]) null); // unset old values
// set model
long idx = 0;
int rownum = 1;
for (SeriesData seriesData : graphData.getSerList()) {
CTNumVal numVal = numData.addNewPt();
numVal.setIdx(idx);
numVal.setV(seriesData.getSerVal() + "");
CTStrVal sVal = strData.addNewPt();
sVal.setIdx(idx);
sVal.setV(seriesData.getSerName());
idx++;
Row row = sheet.createRow(rownum++);
row.createCell(0).setCellValue(seriesData.getSerName());
row.createCell(1).setCellValue(seriesData.getSerVal());
}
numData.getPtCount().setVal(idx);
strData.getPtCount().setVal(idx);
String numDataRange = new CellRangeAddress(1, rownum - 1, 1, 1).formatAsString(sheet.getSheetName(), true);
val.getNumRef().setF(numDataRange);
String axisDataRange = new CellRangeAddress(1, rownum - 1, 0, 0).formatAsString(sheet.getSheetName(), true);
cat.getStrRef().setF(axisDataRange);
}
// 刷新图表内容
public static void refreshGraphContent(Sheet sheet, CTAxDataSource cat, CTNumDataSource val,Integer column, List<SeriesData> serList) {
// Category Axis Data
// 获取图表的值
CTStrData strData = cat.getStrRef().getStrCache();
CTNumData numData = val.getNumRef().getNumCache();
// strData.set
// strData.setPtArray((CTStrVal[]) null); // unset old axis text
// numData.setPtArray((CTNumVal[]) null); // unset old values
// set model
long idx = 0;
int rownum = 1;
for (SeriesData seriesData : serList) {
CTNumVal numVal = numData.addNewPt();
numVal.setIdx(idx);
numVal.setV(seriesData.getSerVal() + "");
CTStrVal sVal = strData.addNewPt();
sVal.setIdx(idx);
sVal.setV(seriesData.getSerName());
idx++;
Row row = sheet.getRow(rownum++);
row.createCell(0).setCellValue(seriesData.getSerName());
row.createCell(column).setCellValue(seriesData.getSerVal());
}
numData.getPtCount().setVal(idx);
strData.getPtCount().setVal(idx);
String numDataRange = new CellRangeAddress(1, rownum - 1, column, column).formatAsString(sheet.getSheetName(), true);
val.getNumRef().setF(numDataRange);
String axisDataRange = new CellRangeAddress(1, rownum - 1, 0, 0).formatAsString(sheet.getSheetName(), true);
cat.getStrRef().setF(axisDataRange);
}
}
package org.springblade.bigdata.ureport.service.impl;
import java.util.List;
/**
* 图表系列数据
*
* @author caoyong
*
*/
public class GraphData {
// 图形标题
private String title;
// 系列值
private List<SeriesData> serList;
public GraphData(String title, List<SeriesData> serList)
{
this.title = title;
this.serList = serList;
}
public String getTitle()
{
return title;
}
public List<SeriesData> getSerList()
{
return serList;
}
}
class SeriesData {
// 系列名称
private String serName;
// 系列值
private double serVal;
public SeriesData(String serName, double serVal)
{
this.serName = serName;
this.serVal = serVal;
}
public String getSerName()
{
return serName;
}
public double getSerVal()
{
return serVal;
}
}
修改后的 ppt