java 嵌入ppt_Java编辑PPT的柱状图,与内嵌的Excel联动
/**
* 条形图;柱形图 的数据写入方法
* @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联动相关推荐
- java 读取ppt_Java 读取PPT文本和图片
本篇文章将介绍通过Java程序来读取PPT幻灯片中的文本及图片的方法.读取图片时,可读取文档中的所有图片,也可以读取指定幻灯片当中的图片. 工具:Free Spire.Presentation for ...
- java 嵌入ppt_Java 插入图片到PPT幻灯片
import com.spire.presentation.*; import com.spire.presentation.drawing.FillFormatType; import java.a ...
- Java在线打开编辑PPT文档
前言: 在我们的项目中有时候会遇到在线打开PPT文档的需求,这个需求看似很简单,只是将每一页的内容放在网页上浏览一下.可是实现起来又无从下手.其实它是一定会用到微软的接口的,要不然怎么让程序识别渲染P ...
- Java 编辑PPT SmartArt图形
本文介绍在Java程序中如何来编辑PPT幻灯片中已有的SmartArt图形,包括重置图形样式.颜色.添加/删除图形节点.编辑节点内容.添加超链接到节点(链接到网页.链接到指定幻灯片)等. 工具:Fre ...
- java异常处理 ppt_Java异常处理、多线程ppt课件
Java异常处理.多线程ppt课件 生产理论把企业仅仅抽象为一个生产函数.一种投入产出关系.一个追求利润最大化的"黑匣子 ",它没有讨论企业内部是如何配置资源的,企业是如何组织生产 ...
- java 基础 ppt_Java基础培训课件.ppt
Java基础培训课件.ppt ,目 录,第1章 Java基本语法 第2章 面向对象,一个实例程序 Java程序的构成 数据类型.变量和常量 运算符和表达式 流程控制,第1章 Java基本语法,一个实例 ...
- Java程序的编辑、编译、运行
Java程序 Java程序包括Java应用程序(Java Application)和Java小应用程序(Java Applet) Java应用程序是完整的程序,一般可以独立运行在Java虚拟机上,而J ...
- citra 图形设置_Java 编辑PPT SmartArt图形 - E-iceblue
本文介绍在Java程序中如何来编辑PPT幻灯片中已有的SmartArt图形,包括重置图形样式.颜色.添加/删除图形节点.编辑节点内容.添加超链接到节点(链接到网页.链接到指定幻灯片)等.在PPT中创建 ...
- java界面设计素材_9.java图形用户界面设计.ppt
9.java图形用户界面设计.ppt 还剩 150页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 151v 程 ...
最新文章
- error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值
- Python才是世界上最好的语言
- 数学--数论--最小公倍数+最大公约数
- java面经大全,献给每一个努力过,在努力以及将要努力的人。goodlucky。2018-10-15开始更新
- kodi电视smb android,小米/天猫魔盒KODI(XBMC)SMB协议播放测试
- NISP-电子邮件安全
- 刘德华--5难忘长发飘飘
- K倍交叉验证配对t检验
- windows xp sp3系统下载
- 递归解决不含连续的1的位串个数的问题
- 标准差越大越集中_中国大学MOOC: 正态分布的标准差越大,其概率密度曲线越高越集中。...
- 【附源码】计算机毕业设计JAVA支部党建工作
- java线程池介绍(一)
- 【Python数据分析及可视化】美国犯罪监禁数据分析与可视化
- 兼容性事件监听完美封装addEvent
- nginx 如何配置来获取用户真实IP
- WordPress如图略缩图不显示问题
- 一百种消灭无聊的方法
- 经典CNN算法解析实战-第J5周:DenseNet+SE-Net实战
- AndroidStudio 安装及配置
热门文章
- 大数据如何改变世界?不尽数据滚滚来
- 【英语面试】四.计算机专业英语面试常见问题(优缺点/观点/观念篇)
- vue---axios拦截器处理登录失效跳转登录页
- 廖雪峰python教程在哪看_为什么看不懂廖雪峰的Python学习教程?
- iPhone苹果手机微信读书付费会员卡连续包月怎么取消关闭订阅?
- Lijiacheng's guideline for our young guies
- java中的replace用法_java中replace用法举例:replace(char oldChar, char newChar)返回一个新的字符串...
- Guitar Pro8免费吉他曲谱mySongBook
- 怎么查购置苹果手机日期
- u盘linux系统盘制作,制作Linux的U盘(usb)启动盘