POI处理PPT的表格table,XSLFTable样式设置

来源:互联网 发布:jre 8u91 windows x32 编辑:程序博客网 时间:2024/04/28 21:58

POI版本3.14

ppt中插入表格(table),是可以设置表格的样式的:抬头行有背景颜色,抬头行文字默认成白色,数据行分奇数偶数行有间隔背景色,这个样式是附加在表格元素上的,而不是加在行或者格子上,即从XSLFTableRow和XSLFTableCell是读取不到这个样式设置的。

从XSLFTable中找这个设置。查看XSLFTable的方法,发现有个getCTTable(),预览返回值的string内容:

<xml-fragment xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">  <a:tblPr firstRow="1" bandRow="1">    <a:tableStyleId>{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0}</a:tableStyleId>  </a:tblPr>  <a:tblGrid>    <a:gridCol w="2709333"/>    <a:gridCol w="2709333"/>    <a:gridCol w="2709333"/>  </a:tblGrid>  <a:tr h="370840">    <a:tc>      <a:txBody>        <a:bodyPr/>        <a:lstStyle/>        <a:p>          <a:r>            <a:rPr lang="en-US" altLang="zh-CN" dirty="0" err="1" smtClean="0"/>            <a:t>aa</a:t>          </a:r>          <a:endParaRPr lang="zh-CN" altLang="en-US" dirty="0"/>        </a:p>      </a:txBody>      <a:tcPr/>    </a:tc>    <a:tc>      <a:txBody>        <a:bodyPr/>        <a:lstStyle/>        <a:p>          <a:r>            <a:rPr lang="en-US" altLang="zh-CN" dirty="0" smtClean="0"/>            <a:t>bb</a:t>          </a:r>          <a:endParaRPr lang="zh-CN" altLang="en-US" dirty="0"/>        </a:p>      </a:txBody>      <a:tcPr/>    </a:tc>    <a:tc>      <a:txBody>        <a:bodyPr/>        <a:lstStyle/>        <a:p>          <a:r>            <a:rPr lang="en-US" altLang="zh-CN" dirty="0" smtClean="0"/>            <a:t>cc</a:t>          </a:r>          <a:endParaRPr lang="zh-CN" altLang="en-US" dirty="0"/>        </a:p>      </a:txBody>      <a:tcPr/>    </a:tc>  </a:tr>  <a:tr h="370840">    <a:tc>      <a:txBody>        <a:bodyPr/>        <a:lstStyle/>        <a:p>          <a:r>            <a:rPr lang="en-US" altLang="zh-CN" dirty="0" err="1" smtClean="0"/>            <a:t>dd</a:t>          </a:r>          <a:endParaRPr lang="zh-CN" altLang="en-US" dirty="0"/>        </a:p>      </a:txBody>      <a:tcPr/>    </a:tc>    <a:tc>      <a:txBody>        <a:bodyPr/>        <a:lstStyle/>        <a:p>          <a:r>            <a:rPr lang="en-US" altLang="zh-CN" dirty="0" err="1" smtClean="0"/>            <a:t>ee</a:t>          </a:r>          <a:endParaRPr lang="zh-CN" altLang="en-US" dirty="0"/>        </a:p>      </a:txBody>      <a:tcPr/>    </a:tc>    <a:tc>      <a:txBody>        <a:bodyPr/>        <a:lstStyle/>        <a:p>          <a:r>            <a:rPr lang="en-US" altLang="zh-CN" dirty="0" smtClean="0"/>            <a:t>ff</a:t>          </a:r>          <a:endParaRPr lang="zh-CN" altLang="en-US" dirty="0"/>        </a:p>      </a:txBody>      <a:tcPr/>    </a:tc>  </a:tr></xml-fragment>

这个PPT上有一个2行3列的table,单元格的文本分别是aa、bb、cc、dd、ee、ff。

这里有列表table的信息,也有row和cell的信息,当设置了表格样式的时候会有这个属性:

<a:tableStyleId>{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0}</a:tableStyleId>

不同的表格设置同样的蓝色风格或者红色风格,这个属性值也是相同的。

这个属性的获取方法:

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



0 0