poi操作ppt生成图表
2016-06-23 10:39
393 查看
POI版本3.14
操作ppt的HSLF中没有找到操作图表的类。
操作pptx的XSLF中有操作图表的类:org.apache.poi.xslf.usermodel.XSLFChart。
ppt页面(XSLFSlide)没有找到创建一个图标的方法。尝试过从一个模板页读取一个chart元素,再通过
操作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"}; //打开模板ppt pptx = 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 Text CTSerTx 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 Data CTAxDataSource cat = ser.getCat(); CTStrData strData = cat.getStrRef().getStrCache(); //获取图表的值 CTNumDataSource val = ser.getVal(); CTNumData numData = val.getNumRef().getNumCache(); strData.setPtArray(null); // unset old axis text numData.setPtArray(null); // unset old values // set model int 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); //更新嵌入的workbook OutputStream 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"; }
相关文章推荐
- cssplot - CSS 绘制图表
- 如何使用 Beamer 创建演示文稿
- ASP.NET中实现导出ppt文件数据的实例分享
- 一个XML格式数据转换为图表的例子
- C#实现将PPT转换成HTML的方法
- 使用impress.js制作幻灯片
- FusionCharts图表显示双Y轴双(多)曲线
- java读取word-excel-ppt文件代码
- java类中生成jfreechart,返回图表的url地址 代码分享
- PHP读取PPT文件的方法
- ajax读取数据后使用jqchart显示图表的方法
- Android SDK 百度地图通过poi城市内检索简介接口的使用
- Android实现带列表的地图POI周边搜索功能
- Android百度地图poi范围搜索
- Android 百度地图POI搜索功能实例代码
- Java使用poi操作excel实例解析
- Java 使用poi把数据库中数据导入Excel的解决方法
- echarts图表导出excel示例