POI处理PPT的表格table,XSLFTable样式设置
POI版本3.14
ppt中插入表格(table),是可以设置表格的样式的:抬头行有背景颜色,抬头行文字默认成白色,数据行分奇数偶数行有间隔背景色,这个样式是附加在表格元素上的,而不是加在行或者格子上,即从XSLFTableRow和XSLFTableCell是读取不到这个样式设置的。
从XSLFTable中找这个设置。查看XSLFTable的方法,发现有个getCTTable(),预览返回值的string内容:
{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0} aa bb cc dd ee ff
这个PPT上有一个2行3列的table,单元格的文本分别是aa、bb、cc、dd、ee、ff。
这里有列表table的信息,也有row和cell的信息,当设置了表格样式的时候会有这个属性:
不同的表格设置同样的蓝色风格或者红色风格,这个属性值也是相同的。
这个属性的获取方法:
table.getCTTable().getTblPr().getTableStyleId()。
一个完整的例子:
public static void readPpt3() throws Exception {String template = "e:\\table-template3.pptx";XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(template));XSLFSlide slide = ppt.getSlides().get(0);XSLFTable table = null;for(XSLFShape part : slide.getShapes()){if(part instanceof XSLFTable){table = (XSLFTable) part;CTTable ctt = table.getCTTable();CTTableProperties tp = ctt.getTblPr();System.out.println(tp.getTableStyleId());}}
}
设置的时候,用
tp.setTableStyleId("21E4AEA4-8DFA-4A89-87EB-49C32662AFE0");
发现并没有生效。对比getCTTable()的xml相关部分,发现区别在于firstRow="1" bandRow="1"属性。
所以,设置样式的方法是:
CTTable ctt = table.getCTTable();
CTTableProperties tp = ctt.getTblPr();
tp.setFirstRow(true);
tp.setBandRow(true);
tp.setTableStyleId("21E4AEA4-8DFA-4A89-87EB-49C32662AFE0");
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
