/**

* 条形图;柱形图 的数据写入方法

* @param slide 图表

* @param index 柱状图的下标

* @param data 要填充的数据

* @param titles 内嵌Excel的X轴title

* @param columnTitles 内嵌Excel的Y轴title

* @return

*/

public static XSLFSlide setBarChart(XSLFSlide slide, int index, List> data, List titles,

List columnTitles) {

XSLFChart chart = setChartData(slide, index);

List partList = chart.getRelations();

POIXMLDocumentPart xlsPart = null;

// 获取到内嵌的Excel

for (int i = 0; i < partList.size(); i++) {

xlsPart = partList.get(i);

if (xlsPart.getPackagePart().getPartName().getName().endsWith("xlsx")) {

break;

}

}

CTChart ctChart = chart.getCTChart();

CTPlotArea plotArea = ctChart.getPlotArea();

CTBarChart barChart = null;

try {

barChart = plotArea.getBarChartArray(0);

} catch (Exception e) {

log.error("不存在柱状图或者不是柱状图!" + e);

}

List serList = barChart.getSerList();

// 如果模板中的列数与Excel数据中的列不对等

if (serList.size() > columnTitles.size()) {

serList = serList.subList(0, columnTitles.size());

} else if (serList.size() < columnTitles.size()) {

for (int i = 0; i < (columnTitles.size() - serList.size()); i++) {

serList.add(serList.get(0));

}

}

Object[] objArr = serList.toArray();

CTBarSer[] serArr = new CTBarSer[serList.size()];

for (int i = 0; i < objArr.length; i++) {

if (serList.toArray()[i] instanceof CTBarSer) {

serArr[i] = (CTBarSer) objArr[i];

}

}

barChart.setSerArray(serArr);

// 把图表绑定到Excel workbook中

XSSFWorkbook wb = new XSSFWorkbook();

XSSFSheet sheet = wb.createSheet();

// 创建列标题行

Row lineTitle = sheet.createRow(0);

// 获取行数

CTStrData strData = serList.get(0).getCat().getStrRef().getStrCache();

strData.setPtArray(null);

// 创建行数和行标题

for (int i = 0; i < titles.size(); i++) {

lineTitle.createCell(i + 1).setCellValue(titles.get(i));

CTStrVal sVal = strData.addNewPt();

sVal.setIdx(i);

sVal.setV(titles.get(i));

}

for (int rows = 0; rows < columnTitles.size(); rows++) {

sheet.createRow(rows + 1).createCell(0).setCellValue(columnTitles.get(rows));

}

// ser对应一列

for (int i = 0; i < serList.size(); i++) {

CTBarSer ser = serList.get(i);

CTSerTx tx = ser.getTx();

tx.getStrRef().getStrCache().getPtArray(0).setV(columnTitles.get(i));

// 关联列标题

String titleRef = new CellReference(sheet.getSheetName(), i + 1, 0, true, true).formatAsString();

serList.get(i).getTx().getStrRef().setF(titleRef);

// 写入数据

CTNumData numData = serList.get(i).getVal().getNumRef().getNumCache();

// 清除旧的数据值

numData.setPtArray(null);

// 一格

for (int j = 0; j < titles.size(); j++) {

CTNumVal numVal = numData.addNewPt();

numVal.setIdx(j);

numVal.setV("" + getDataDouble(data, j, i));

// 写入workbook

Row row = sheet.getRow(i + 1);

Cell cell = row.createCell(j + 1);

cell.setCellValue(getDataDouble(data, j, i));

}

numData.getPtCount().setVal(titles.size());

strData.getPtCount().setVal(titles.size());

// 设置行标题和数据关联

String numDataRange = new CellRangeAddress(i + 1, i + 1, 1, data.size()).formatAsString(sheet.getSheetName(), true);

serList.get(i).getVal().getNumRef().setF(numDataRange);

}

// 关联行标题

String axisDataRange = new CellRangeAddress(0, 0, 1, data.size()).formatAsString(sheet.getSheetName(), true);

serList.get(0).getCat().getStrRef().setF(axisDataRange);

// 更新嵌入的workbook

updateWorkbook(xlsPart, wb);

return slide;

}

/**

* 更新嵌入的workbook

* @param ppt

* @param xlsPart

* @param wb

* @return

*/

private static void updateWorkbook(POIXMLDocumentPart xlsPart, XSSFWorkbook wb) {

// 更新嵌入的workbook

OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();

try {

wb.write(xlsOut);

} catch (IOException e) {

log.error("PPTUtil.updateWorkbook() :" + e);

} finally {

try {

xlsOut.close();

} catch (IOException e) {

log.error("PPTUtil.updateWorkbook() :" + e);

}

}

}

java 嵌入ppt_Java编辑PPT的柱状图,与内嵌的Excel联动相关推荐

  1. java 读取ppt_Java 读取PPT文本和图片

    本篇文章将介绍通过Java程序来读取PPT幻灯片中的文本及图片的方法.读取图片时,可读取文档中的所有图片,也可以读取指定幻灯片当中的图片. 工具:Free Spire.Presentation for ...

  2. java 嵌入ppt_Java 插入图片到PPT幻灯片

    import com.spire.presentation.*; import com.spire.presentation.drawing.FillFormatType; import java.a ...

  3. Java在线打开编辑PPT文档

    前言: 在我们的项目中有时候会遇到在线打开PPT文档的需求,这个需求看似很简单,只是将每一页的内容放在网页上浏览一下.可是实现起来又无从下手.其实它是一定会用到微软的接口的,要不然怎么让程序识别渲染P ...

  4. Java 编辑PPT SmartArt图形

    本文介绍在Java程序中如何来编辑PPT幻灯片中已有的SmartArt图形,包括重置图形样式.颜色.添加/删除图形节点.编辑节点内容.添加超链接到节点(链接到网页.链接到指定幻灯片)等. 工具:Fre ...

  5. java异常处理 ppt_Java异常处理、多线程ppt课件

    Java异常处理.多线程ppt课件 生产理论把企业仅仅抽象为一个生产函数.一种投入产出关系.一个追求利润最大化的"黑匣子 ",它没有讨论企业内部是如何配置资源的,企业是如何组织生产 ...

  6. java 基础 ppt_Java基础培训课件.ppt

    Java基础培训课件.ppt ,目 录,第1章 Java基本语法 第2章 面向对象,一个实例程序 Java程序的构成 数据类型.变量和常量 运算符和表达式 流程控制,第1章 Java基本语法,一个实例 ...

  7. Java程序的编辑、编译、运行

    Java程序 Java程序包括Java应用程序(Java Application)和Java小应用程序(Java Applet) Java应用程序是完整的程序,一般可以独立运行在Java虚拟机上,而J ...

  8. citra 图形设置_Java 编辑PPT SmartArt图形 - E-iceblue

    本文介绍在Java程序中如何来编辑PPT幻灯片中已有的SmartArt图形,包括重置图形样式.颜色.添加/删除图形节点.编辑节点内容.添加超链接到节点(链接到网页.链接到指定幻灯片)等.在PPT中创建 ...

  9. java界面设计素材_9.java图形用户界面设计.ppt

    9.java图形用户界面设计.ppt 还剩 150页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 151v 程 ...

最新文章

  1. error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值
  2. Python才是世界上最好的语言
  3. 数学--数论--最小公倍数+最大公约数
  4. java面经大全,献给每一个努力过,在努力以及将要努力的人。goodlucky。2018-10-15开始更新
  5. kodi电视smb android,小米/天猫魔盒KODI(XBMC)SMB协议播放测试
  6. NISP-电子邮件安全
  7. 刘德华--5难忘长发飘飘
  8. K倍交叉验证配对t检验
  9. windows xp sp3系统下载
  10. 递归解决不含连续的1的位串个数的问题
  11. 标准差越大越集中_中国大学MOOC: 正态分布的标准差越大,其概率密度曲线越高越集中。...
  12. 【附源码】计算机毕业设计JAVA支部党建工作
  13. java线程池介绍(一)
  14. 【Python数据分析及可视化】美国犯罪监禁数据分析与可视化
  15. 兼容性事件监听完美封装addEvent
  16. nginx 如何配置来获取用户真实IP
  17. WordPress如图略缩图不显示问题
  18. 一百种消灭无聊的方法
  19. 经典CNN算法解析实战-第J5周:DenseNet+SE-Net实战
  20. AndroidStudio 安装及配置

热门文章

  1. 大数据如何改变世界?不尽数据滚滚来
  2. 【英语面试】四.计算机专业英语面试常见问题(优缺点/观点/观念篇)
  3. vue---axios拦截器处理登录失效跳转登录页
  4. 廖雪峰python教程在哪看_为什么看不懂廖雪峰的Python学习教程?
  5. iPhone苹果手机微信读书付费会员卡连续包月怎么取消关闭订阅?
  6. Lijiacheng's guideline for our young guies
  7. java中的replace用法_java中replace用法举例:replace(char oldChar, char newChar)返回一个新的字符串...
  8. Guitar Pro8免费吉他曲谱mySongBook
  9. 怎么查购置苹果手机日期
  10. u盘linux系统盘制作,制作Linux的U盘(usb)启动盘