poi 操作 PPT,針對 PPTX--表格簡單操作
一些對於 PPT 內表格的簡單操作
1、對模板 ppt 內的表格進行操作
對下面幻燈片中表格的表格進行操作,對第三行中各單元格進行不同的操作
幻燈片修改前
代碼
@Test
public void testDemo10() {
PPTUtil pptUtil = new PPTUtil(filePath);
XSLFTable table = pptUtil.getTableFromSlide(pptUtil.getSlides().get(1)); // 從指定的幻燈片中獲取表格元素
XSLFTableRow tableRow = pptUtil.getTableRows(table).get(2); // 獲取第三行
pptUtil.setCellColor(tableRow.getCells().get(0), "#ff0000"); // 字體顏色
pptUtil.setCellFontfamily(tableRow.getCells().get(1), "宋體"); // 字體
pptUtil.setCellFontWesternFontfamily(tableRow.getCells().get(1), "宋體"); // 西文字體
pptUtil.setCellFontSize(tableRow.getCells().get(2), "18"); // 字體大小
pptUtil.setCellFillColor(tableRow.getCells().get(3), "#ff0000"); // 單元格填充顏色
pptUtil.setCellBold(tableRow.getCells().get(4), true); // 單元格文本是否加粗
pptUtil.setCellStrike(tableRow.getCells().get(5), true); // 單元格文本是否加刪除線
pptUtil.setCellItalic(tableRow.getCells().get(6), true); // 單元格文本是否斜體
pptUtil.setCellUnderline(tableRow.getCells().get(7), true); // 單元格文本是否加下划線
pptUtil.setCellHorizontalAlign(tableRow.getCells().get(8), "left"); // 單元格水平對齊方式
pptUtil.setCellVerticalAlign(tableRow.getCells().get(9), "top"); // 單元格垂直對齊方式
// 在最后 一個單元格中添加一個段落
XSLFTextParagraph textParagraph = pptUtil.addCellParagraph(tableRow.getCells().get(10));
// 對新添加的段落添加文字
pptUtil.addParagraphText(textParagraph, true, "9999");
// 保存設置后的內容
pptUtil.writePPT(exportPath);
}
修改后的幻燈片
2、場景應用
(給幻燈片表格中第4行數據值最大兩個單元格進行填充)
提供以下幻燈片
代碼
@Test
public void testDemo11() {
// 讀取 ppt
PPTUtil pptUtil = new PPTUtil(filePath);
XSLFTable table = pptUtil.getTableFromSlide(pptUtil.getSlides().get(2)); // 獲取第三頁幻燈片
XSLFTableRow tableRow = pptUtil.getTableRows(table).get(2); // 獲取第
List<XSLFTableCell> tableCols = pptUtil.getTableColsByRow(table, 2, 1); // 獲取表格中第2行從第1列開始到最后一列的單元格列表
List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>(); // 將單元格封裝為 mapList,cell 的對應的值為單元格對象,text 對應的值是數值
for (XSLFTableCell tableCol : tableCols) {
Map<String, Object> tempMap = new HashMap<String, Object>();
tempMap.put("cell", tableCol);
tempMap.put("text", tableCol.getText().replace("%", ""));
maps.add(tempMap);
}
// 獲取封裝好的 mapList 中 text 最大的 2 個值的新的 mapList
List<Map<String, Object>> maxValueList = SupportUtil.getMaxValueList(maps, "text", 2);
// 對獲取到的最大值的新 mapList 中獲取單元格,並對單元格填充紅色
for (Map<String, Object> map : maxValueList) {
pptUtil.setCellFillColor((XSLFTableCell) map.get("cell"), "#ff0000");
}
pptUtil.writePPT(exportPath);
}
設置后的幻燈片
同樣的,我還添加了一下如下方法
1、getMinValueList(List<Map<String, Object>> sourMaps, String keyWord, int num)
:獲取 maps 中根據 keyWord 所對應的值的最小的 map 列表
2、getGtValList(List<Map<String, Object>> sourMaps, String keyWord, String value, Boolean isEqual)
:獲取 maps 中根據 keyWord 所對應的值的大於(大於等於)value 值的 map 列表(isEqual 用於指定是否等於)
3、getLtValList(List<Map<String, Object>> sourMaps, String keyWord, String value, Boolean isEqual)
:獲取 maps 中根據 keyWord 所對應的值的小於(小於等於)value 值的 map 列表(isEqual 用於指定是否等於)
4、getEqValList(List<Map<String, Object>> sourMaps, String keyWord, String value)
:獲取 maps 中根據 keyWord 所對應的值的等於 value 值的 map 列表
注: 本博客代碼只為學習交流分享
PPTUtil 工具地址:https://gitee.com/livekeys/officetool.git
(PPTUtil 持續更新),代碼有問題的地方一起交流。