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
(目前只支援更新餅圖,折線圖,柱狀圖,雷達圖,使用方法後續繼續更新),有問題請聯絡我。