poi 操作 PPT,針對 PPTX--圖表篇

livekeys 發表於 2021-04-21

poi 操作 PPT,針對 PPTX--圖表篇

接下來對 ppt 內的圖表進行操作,替換圖表的資料

原幻燈片樣式

poi 操作 PPT,針對 PPTX--圖表篇

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

設定後效果
poi 操作 PPT,針對 PPTX--圖表篇

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);
}

替換後效果
poi 操作 PPT,針對 PPTX--圖表篇

這裡強調一下,如下圖,因為兩個柱狀圖是屬於同一個y軸的,所以 pptUtil.getBarChartFromChart(chart).get(0) 方法就能獲取到兩個柱狀圖,只是這兩個柱狀圖是屬於同一個柱狀圖 barChart 裡面的不同 serials(系列) 裡面。
poi 操作 PPT,針對 PPTX--圖表篇

:如果兩個柱狀圖屬於兩個不同的軸,那麼這兩個柱狀圖就在兩個不同的 barChart 裡面。

PPTUtil 工具地址:https://gitee.com/livekeys/officetool.git
(目前只支援更新餅圖,折線圖,柱狀圖,雷達圖,使用方法後續繼續更新),有問題請聯絡我。