poi 操作 PPT,针对 PPTX--图表篇
接下来对 ppt 内的图表进行操作,替换图表的数据
1、读取 PPT 模板
String filePath = "C:\\Users\\HONOR\\Desktop\\xsmb.pptx";
String exportPath = "C:\\Users\\HONOR\\Desktop\\a.pptx";
// 读取 ppt 模板
PPTUtil pptUtil = new PPTUtil(filePath);
2、替换标题
@Test
public void testDemo() {
// 读取 ppt
PPTUtil pptUtil = new PPTUtil(filePath);
// 获取第二页幻灯片中的第一个图表,该幻灯片中只有一个图表
XSLFChart chart = pptUtil.getChartFromSlide(pptUtil.getSlides().get(1));
// 获取标题
XSLFTextShape titleShape = chart.getTitleShape();
// 打印该图表的标题
System.out.println(titleShape.getText());
// 重新设置图表标题
XSLFTextParagraph textParagraph = pptUtil.setChartTitle(titleShape, false);
pptUtil.addParagraphText(textParagraph, false, "销售统计表1-修改标题后", true, "微软雅黑", "微软雅黑", "18");
// 写入到新的文件
pptUtil.writePPT(exportPath);
}
输出:
销售统计表1
设置后效果
4、替换图表数据
@Test
public void testDemo() {
PPTUtil pptUtil = new PPTUtil(filePath);
// 从第二张幻灯片中获取第一个图表
XSLFChart chart = pptUtil.getChartFromSlide(pptUtil.getSlides().get(1));
// 存放数据
List<List<String>> data = new ArrayList<List<String>>();
List<String> tempData1 = new ArrayList<String>();
List<String> tempData2 = new ArrayList<String>();
// 构造数据
for (int i = 0; i < 11; i++) {
tempData1.add("标签" + (i + 1));
tempData2.add((i + 1) + "");
}
data.add(tempData1);
data.add(tempData2);
// 替换第一个柱状图的数据
pptUtil.updateBarCat(pptUtil.getBarChartFromChart(chart).get(0), 0, data); // 替换 cat
pptUtil.updateBarDataCache(pptUtil.getBarChartFromChart(chart).get(0), 0, tempData2); // 替换数据缓存
// 替换第二个柱状图的数据
pptUtil.updateBarCat(pptUtil.getBarChartFromChart(chart).get(0), 1, data); // 替换 cat
pptUtil.updateBarDataCache(pptUtil.getBarChartFromChart(chart).get(0), 1, tempData2); // 替换数据缓存
// 替换第一个折线图的数据
pptUtil.updateLineCat(pptUtil.getLineChartFromChart(chart).get(0), 0, data); // 替换 cat
pptUtil.updateLineDataCache(pptUtil.getLineChartFromChart(chart).get(0), 0, tempData2); // 替换数据缓存
// 替换第二个折线图的数据
pptUtil.updateLineCat(pptUtil.getLineChartFromChart(chart).get(0), 1, data); // 替换 cat
pptUtil.updateLineDataCache(pptUtil.getLineChartFromChart(chart).get(0), 1, tempData2); // 替换数据缓存
pptUtil.writePPT(exportPath);
}
替换后效果
这里强调一下,如下图,因为两个柱状图是属于同一个y轴的,所以 pptUtil.getBarChartFromChart(chart).get(0)
方法就能获取到两个柱状图,只是这两个柱状图是属于同一个柱状图 barChart 里面的不同 serials(系列) 里面。
注:如果两个柱状图属于两个不同的轴,那么这两个柱状图就在两个不同的 barChart 里面。
PPTUtil 工具地址:https://gitee.com/livekeys/officetool.git
(目前只支持更新饼图,折线图,柱状图,雷达图,使用方法后续继续更新),有问题请联系我。