菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
275
0

poi 操作 PPT,针对 PPTX--图表篇

原创
05/13 14:22
阅读数 5287

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
(目前只支持更新饼图,折线图,柱状图,雷达图,使用方法后续继续更新),有问题请联系我。

发表评论

0/200
275 点赞
0 评论
收藏
为你推荐 换一批