700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > poi操作ppt生成图表

poi操作ppt生成图表

时间:2020-11-19 13:58:22

相关推荐

poi操作ppt生成图表

POI版本3.14

操作ppt的HSLF中没有找到操作图表的类。

操作pptx的XSLF中有操作图表的类:org.apache.poi.xslf.usermodel.XSLFChart。

ppt页面(XSLFSlide)没有找到创建一个图标的方法。尝试过从一个模板页读取一个chart元素,再通过

slide.addRelation("sdf", XSLFRelation.CHART, xlsPart);

方法添加到ppt页面中,结果保存的时候报错。

下面代码是读取一个带有空白饼状图的ppt,读取ppt的饼状图,并设置数据,然后保存。

public static String makePpt(String path) {String template = "e:\\pie-chart-template.pptx";if (path == null) {path = "e:\\pie-chart-out.pptx";}XMLSlideShow pptx = null;try {String chartTitle ="chart title";String[] names = new String[] {"East", "Middle", "West"};String[] values = new String[] {"189", "412", "250"};//打开模板pptpptx = new XMLSlideShow(new FileInputStream(template));//获取第一个ppt页面XSLFSlide slide = pptx.getSlides().get(0);//遍历第一页元素找到图表XSLFChart chart = null;for(POIXMLDocumentPart part : slide.getRelations()){if(part instanceof XSLFChart){chart = (XSLFChart) part;break;}}if (chart == null) {return "no chart";}POIXMLDocumentPart xlsPart = chart.getRelations().get(0);//把图表绑定到Excel workbook中XSSFWorkbook wb = new XSSFWorkbook();XSSFSheet sheet = wb.createSheet();CTChart ctChart = chart.getCTChart();CTPlotArea plotArea = ctChart.getPlotArea();CTPieChart pieChart = plotArea.getPieChartArray(0);//获取图表的系列CTPieSer ser = pieChart.getSerArray(0);// Series TextCTSerTx tx = ser.getTx();tx.getStrRef().getStrCache().getPtArray(0).setV(chartTitle);sheet.createRow(0).createCell(1).setCellValue(chartTitle);String titleRef = new CellReference(sheet.getSheetName(), 0, 1, true, true).formatAsString();tx.getStrRef().setF(titleRef);// Category Axis DataCTAxDataSource cat = ser.getCat();CTStrData strData = cat.getStrRef().getStrCache();//获取图表的值CTNumDataSource val = ser.getVal();CTNumData numData = val.getNumRef().getNumCache();strData.setPtArray(null); // unset old axis textnumData.setPtArray(null); // unset old values// set modelint idx = 0;int rownum = 1;String ln;for (int i=0; i<names.length; i++) {CTNumVal numVal = numData.addNewPt();numVal.setIdx(idx);numVal.setV(values[i]);CTStrVal sVal = strData.addNewPt();sVal.setIdx(idx);sVal.setV(names[i]);idx++;XSSFRow row = sheet.createRow(rownum++);row.createCell(0).setCellValue(names[i]);row.createCell(1).setCellValue(Double.valueOf(values[i]));}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);//更新嵌入的workbookOutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();wb.write(xlsOut);xlsOut.close();//保存文件OutputStream out = new FileOutputStream(path);pptx.write(out);out.close();} catch (Exception e) {return e.getMessage();} finally {if (pptx != null) {try {pptx.close();} catch (Exception ee){//nothing}}}return "success";}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。