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 持续更新),代码有问题的地方一起交流。