Page 1 of 1

add table to slide

PostPosted: Thu Jun 09, 2011 8:57 pm
by qhfcrystal
Hi, I'm really new in PPTX4j, though I used DOCX4j before. I really don't have a clue how could I add a table in one slide. I tired CTTable. However, i do not know what container for me to get a CTTable or add a CTTable. Could you help me? maybe you could give me some sample, cause for pptx4j, I nearly find no sample on the internet. :cry:

Re: add table to slide

PostPosted: Fri Jun 10, 2011 12:26 am
by jason
If you create a pptx containing a table in powerpoint, and inspect the resulting xml, you'll see you need a structure:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
      <p:graphicFrame>
        <a:graphic>
          <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
            <a:tbl>
Parsed in 0.000 seconds, using GeSHi 1.0.8.4


inside your shape tree.

The complete slide follows at the end of this post.

To create that, you have the usual options outlined in the Getting Started guide. Either unmarshall a string containing your table, or create the relevant JAXB structure one object at a time. If you take the second approach, you'll need:

Code: Select all
p:graphicFrame          org.pptx4j.pml.ObjectFactory    createCTGraphicalObjectFrame()
a:graphic                  org.docx4j.dml.ObjectFactory    createGraphic()
a:graphicData            org.docx4j.dml.ObjectFactory    createGraphicData()
a:tbl                        org.docx4j.dml.ObjectFactory    createTbl(CTTable value) and createCTTable()


That should be enough to get you started.

cheers .. Jason


Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
<p:sld 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">
  <p:cSld>
    <p:spTree>
      <p:nvGrpSpPr>
        <p:cNvPr id="1" name=""/>
        <p:cNvGrpSpPr/>
        <p:nvPr/>
      </p:nvGrpSpPr>
      <p:grpSpPr>
        <a:xfrm>
          <a:off x="0" y="0"/>
          <a:ext cx="0" cy="0"/>
          <a:chOff x="0" y="0"/>
          <a:chExt cx="0" cy="0"/>
        </a:xfrm>
      </p:grpSpPr>
      <p:graphicFrame>
        <p:nvGraphicFramePr>
          <p:cNvPr id="4" name="Table 3"/>
          <p:cNvGraphicFramePr>
            <a:graphicFrameLocks noGrp="1"/>
          </p:cNvGraphicFramePr>
          <p:nvPr/>
        </p:nvGraphicFramePr>
        <p:xfrm>
          <a:off x="1524000" y="1397000"/>
          <a:ext cx="6096000" cy="741680"/>
        </p:xfrm>
        <a:graphic>
          <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
            <a:tbl>
              <a:tblPr firstRow="1" bandRow="1">
                <a:tableStyleId>{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}</a:tableStyleId>
              </a:tblPr>
              <a:tblGrid>
                <a:gridCol w="3048000"/>
                <a:gridCol w="3048000"/>
              </a:tblGrid>
              <a:tr h="370840">
                <a:tc>
                  <a:txBody>
                    <a:bodyPr/>
                    <a:lstStyle/>
                    <a:p>
                      <a:r>
                        <a:rPr lang="en-AU" dirty="0" smtClean="0"/>
                        <a:t>11</a:t>
                      </a:r>
                      <a:endParaRPr lang="en-AU" 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-AU" dirty="0" smtClean="0"/>
                        <a:t>12</a:t>
                      </a:r>
                      <a:endParaRPr lang="en-AU" 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-AU" dirty="0" smtClean="0"/>
                        <a:t>21</a:t>
                      </a:r>
                      <a:endParaRPr lang="en-AU" 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-AU" dirty="0" smtClean="0"/>
                        <a:t>22</a:t>
                      </a:r>
                      <a:endParaRPr lang="en-AU" dirty="0"/>
                    </a:p>
                  </a:txBody>
                  <a:tcPr/>
                </a:tc>
              </a:tr>
            </a:tbl>
          </a:graphicData>
        </a:graphic>
      </p:graphicFrame>
    </p:spTree>
  </p:cSld>
  <p:clrMapOvr>
    <a:masterClrMapping/>
  </p:clrMapOvr>
</p:sld>
 
Parsed in 0.008 seconds, using GeSHi 1.0.8.4

Re: add table to slide

PostPosted: Fri Jun 10, 2011 8:13 pm
by qhfcrystal
hi jason.

Thx for ur reply.
I'm stucking at, after I add the graphic data, i could not see an entry to add tbl with graphic data.
my code is as below
Code: Select all
   ObjectFactory objectFactory=new ObjectFactory();
      org.pptx4j.pml.ObjectFactory graphicObjectFactory=new org.pptx4j.pml.ObjectFactory();
      CTGraphicalObjectFrame graphicFrame=graphicObjectFactory.createCTGraphicalObjectFrame();
      Graphic graphic=objectFactory.createGraphic();   
      GraphicData graphicData=objectFactory.createGraphicData();
      
      CTTable ctTable=objectFactory.createCTTable();
      JAXBElement<CTTable> tbl=objectFactory.createTbl(ctTable);
      
      CTTableRow tableRow=objectFactory.createCTTableRow();
      CTTableCell tableCell=objectFactory.createCTTableCell();
      
      slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add(graphicFrame);
      graphicFrame.setGraphic(graphic);
      graphic.setGraphicData(graphicData);

      graphicData.setUri("http://schemas.openxmlformats.org/drawingml/2006/table");


i see the method with graphicData, i could not see any entry method for me to add tbl.

Re: add table to slide

PostPosted: Fri Jun 10, 2011 9:59 pm
by jason
graphicData.getAny().add(e)

Re: add table to slide

PostPosted: Mon Jun 13, 2011 9:10 pm
by qhfcrystal
Hi Jason, I still cannot get it through.

As you said, there're two ways to build a table. one is unmarshalling and the other one is i create the object and add them manually. However, i could not get through with each one.

here's the xml file (graphicFrame part) when I use powerpoint to create a cell.
Code: Select all
- <p:graphicFrame>
- <p:nvGraphicFramePr>
  <p:cNvPr id="4114" name="Group 18" />
- <p:cNvGraphicFramePr>
  <a:graphicFrameLocks noGrp="1" />
  </p:cNvGraphicFramePr>
  <p:nvPr />
  </p:nvGraphicFramePr>
- <p:xfrm>
  <a:off x="1524000" y="1981200" />
  <a:ext cx="4038600" cy="762000" />
  </p:xfrm>
- <a:graphic>
- <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
- <a:tbl>
  <a:tblPr />
- <a:tblGrid>
  <a:gridCol w="4038600" />
  </a:tblGrid>
- <a:tr h="762000">
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:pPr marL="0" marR="0" lvl="0" indent="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="0" fontAlgn="base" latinLnBrk="0" hangingPunct="0">
- <a:lnSpc>
  <a:spcPct val="100000" />
  </a:lnSpc>
- <a:spcBef>
  <a:spcPct val="20000" />
  </a:spcBef>
- <a:spcAft>
  <a:spcPct val="0" />
  </a:spcAft>
  <a:buClrTx />
  <a:buSzTx />
  <a:buFontTx />
  <a:buNone />
  <a:tabLst />
  </a:pPr>
- <a:endParaRPr kumimoji="0" lang="en-US" sz="2800" b="0" i="0" u="none" strike="noStrike" cap="none" normalizeH="0" baseline="0" smtClean="0">
- <a:ln>
  <a:noFill />
  </a:ln>
- <a:solidFill>
  <a:schemeClr val="tx1" />
  </a:solidFill>
  <a:effectLst />
  <a:latin typeface="Arial" charset="0" />
  </a:endParaRPr>
  </a:p>
  </a:txBody>
- <a:tcPr horzOverflow="overflow">
- <a:lnL w="12700" cap="flat" cmpd="sng" algn="ctr">
- <a:solidFill>
  <a:schemeClr val="tx1" />
  </a:solidFill>
  <a:prstDash val="solid" />
  <a:round />
  <a:headEnd type="none" w="med" len="med" />
  <a:tailEnd type="none" w="med" len="med" />
  </a:lnL>
- <a:lnR w="12700" cap="flat" cmpd="sng" algn="ctr">
- <a:solidFill>
  <a:schemeClr val="tx1" />
  </a:solidFill>
  <a:prstDash val="solid" />
  <a:round />
  <a:headEnd type="none" w="med" len="med" />
  <a:tailEnd type="none" w="med" len="med" />
  </a:lnR>
- <a:lnT w="12700" cap="flat" cmpd="sng" algn="ctr">
- <a:solidFill>
  <a:schemeClr val="tx1" />
  </a:solidFill>
  <a:prstDash val="solid" />
  <a:round />
  <a:headEnd type="none" w="med" len="med" />
  <a:tailEnd type="none" w="med" len="med" />
  </a:lnT>
- <a:lnB w="12700" cap="flat" cmpd="sng" algn="ctr">
- <a:solidFill>
  <a:schemeClr val="tx1" />
  </a:solidFill>
  <a:prstDash val="solid" />
  <a:round />
  <a:headEnd type="none" w="med" len="med" />
  <a:tailEnd type="none" w="med" len="med" />
  </a:lnB>
- <a:lnTlToBr>
  <a:noFill />
  </a:lnTlToBr>
- <a:lnBlToTr>
  <a:noFill />
  </a:lnBlToTr>
  <a:noFill />
  </a:tcPr>
  </a:tc>
  </a:tr>
  </a:tbl>
  </a:graphicData>


I'm wondering, when create object by myself, do I need to add those tags (e.g. <a lnBlToTr>) by myself too?
Cause with docx, i just add table cell and some table pro. That's all.
However, this way, i got a wrong document which i could not open.

Code: Select all
ObjectFactory objectFactory=new ObjectFactory();
      org.pptx4j.pml.ObjectFactory graphicObjectFactory=new org.pptx4j.pml.ObjectFactory();
      CTGraphicalObjectFrame graphicFrame=graphicObjectFactory.createCTGraphicalObjectFrame();
      Graphic graphic=objectFactory.createGraphic();   
      GraphicData graphicData=objectFactory.createGraphicData();
      
      CTTable ctTable=objectFactory.createCTTable();
      JAXBElement<CTTable> tbl=objectFactory.createTbl(ctTable);
      
      CTTableRow tableRow=objectFactory.createCTTableRow();
      CTTableCell tableCell=objectFactory.createCTTableCell();
      CTTableProperties ctTablePro=objectFactory.createCTTableProperties();
      CTTableGrid ctTableGrid=objectFactory.createCTTableGrid();
      CTTableCol ctTableCol=objectFactory.createCTTableCol();
      ctTableGrid.getGridCol().add(ctTableCol);
   
      slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add(graphicFrame);
      graphicFrame.setGraphic(graphic);
      graphic.setGraphicData(graphicData);
      graphicData.setUri("http://schemas.openxmlformats.org/drawingml/2006/table");
      graphicData.getAny().add(tbl);
      ctTable.getTr().add(tableRow);
      ctTable.setTblPr(ctTablePro);
      ctTable.setTblGrid(ctTableGrid);
      tableRow.getTc().add(tableCell);
      
      
      
      presentationMLPackage.save(new java.io.File(outputfilepath));

      System.out.println("\n\n done .. \n\n");


Then I check about my slide1.xml file, the structure is:

Code: Select all
  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <p:sld xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
- <p:cSld>
- <p:spTree>
- <p:nvGrpSpPr>
  <p:cNvPr name="" id="1" />
  <p:cNvGrpSpPr />
  <p:nvPr />
  </p:nvGrpSpPr>
- <p:grpSpPr>
- <a:xfrm>
  <a:off y="0" x="0" />
  <a:ext cy="0" cx="0" />
  <a:chOff y="0" x="0" />
  <a:chExt cy="0" cx="0" />
  </a:xfrm>
  </p:grpSpPr>
- <p:graphicFrame>
- <a:graphic>
- <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
- <a:tbl>
  <a:tblPr />
- <a:tblGrid>
  <a:gridCol w="0" />
  </a:tblGrid>
- <a:tr h="0">
  <a:tc />
  </a:tr>
  </a:tbl>
  </a:graphicData>
  </a:graphic>
  </p:graphicFrame>
  </p:spTree>
  </p:cSld>
  </p:sld>



Then i try to unmashalling my graphicFrame.
I copy those xml string into my class and unmarshalling them.
However, i got the error said that p for <p:graphicFrame> is not bound.

Could the XmlUtils.unmarshalString class unmarshal all nodes in pptx?

Thx!

Re: add table to slide

PostPosted: Mon Jun 13, 2011 9:30 pm
by jason
For the unmarshalString approach, make sure you have all namespaces declared in your string, and then try the XmlUtils method:

public static Object unmarshalString(String str, JAXBContext jc, Class declaredType)

Note parameter Class declaredType.

For the other approach, you'll have to experiment with what you can get away without. Easiest to do that by editing the pptx you created in Powerpoint, and see whether it can still be opened. But if its anything like docx, you'll need at least minimal content in your tc.

Re: add table to slide

PostPosted: Wed Jun 15, 2011 3:10 pm
by qhfcrystal
Hi jason.

For unmarshalString, i used the method you said.
Code: Select all
CTGraphicalObjectFrame graphicFrame2=(CTGraphicalObjectFrame) XmlUtils.unmarshalString(addGraphicFrame, Context.jcPML,CTGraphicalObjectFrame.class);


Code: Select all
private static String addGraphicFrame="<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id=\"3083\" name=\"Group 11\"/><p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr><p:nvPr/></p:nvGraphicFramePr><p:xfrm><a:off x=\"1524000\" y=\"1397000\"/><a:ext cx=\"6096000\" cy=\"4064000\"/></p:xfrm><a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\"><a:tbl><a:tblPr/><a:tblGrid><a:gridCol w=\"6096000\"/></a:tblGrid><a:tr h=\"2032000\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr marL=\"0\" marR=\"0\" lvl=\"0\" indent=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"0\" fontAlgn=\"base\" latinLnBrk=\"0\" hangingPunct=\"0\"><a:lnSpc><a:spcPct val=\"100000\"/></a:lnSpc><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:spcAft><a:spcPct val=\"0\"/></a:spcAft><a:buClrTx/><a:buSzTx/><a:buFontTx/><a:buNone/><a:tabLst/></a:pPr><a:endParaRPr kumimoji=\"0\" lang=\"en-US\" sz=\"2800\" b=\"0\" i=\"0\" u=\"none\" strike=\"noStrike\" cap=\"none\" normalizeH=\"0\" baseline=\"0\" smtClean=\"0\"><a:ln><a:noFill/></a:ln><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:effectLst/><a:latin typeface=\"Arial\" charset=\"0\"/></a:endParaRPr></a:p></a:txBody><a:tcPr horzOverflow=\"overflow\"><a:lnL w=\"28575\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnL><a:lnR w=\"28575\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnR><a:lnT w=\"28575\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnT><a:lnB w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnB><a:lnTlToBr><a:noFill/></a:lnTlToBr><a:lnBlToTr><a:noFill/></a:lnBlToTr><a:noFill/></a:tcPr></a:tc></a:tr><a:tr h=\"2032000\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr marL=\"0\" marR=\"0\" lvl=\"0\" indent=\"0\" algn=\"l\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"0\" fontAlgn=\"base\" latinLnBrk=\"0\" hangingPunct=\"0\"><a:lnSpc><a:spcPct val=\"100000\"/></a:lnSpc><a:spcBef><a:spcPct val=\"20000\"/></a:spcBef><a:spcAft><a:spcPct val=\"0\"/></a:spcAft><a:buClrTx/><a:buSzTx/><a:buFontTx/><a:buNone/><a:tabLst/></a:pPr><a:endParaRPr kumimoji=\"0\" lang=\"en-US\" sz=\"2800\" b=\"0\" i=\"0\" u=\"none\" strike=\"noStrike\" cap=\"none\" normalizeH=\"0\" baseline=\"0\" smtClean=\"0\"><a:ln><a:noFill/></a:ln><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:effectLst/><a:latin typeface=\"Arial\" charset=\"0\"/></a:endParaRPr></a:p></a:txBody><a:tcPr horzOverflow=\"overflow\"><a:lnL w=\"28575\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnL><a:lnR w=\"28575\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnR><a:lnT w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnT><a:lnB w=\"28575\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:prstDash val=\"solid\"/><a:round/><a:headEnd type=\"none\" w=\"med\" len=\"med\"/><a:tailEnd type=\"none\" w=\"med\" len=\"med\"/></a:lnB><a:lnTlToBr><a:noFill/></a:lnTlToBr><a:lnBlToTr><a:noFill/></a:lnBlToTr><a:noFill/></a:tcPr></a:tc></a:tr></a:tbl></a:graphicData></a:graphic></p:graphicFrame>";


The exception I got is :

Code: Select all
Exception in thread "main" javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: The prefix "p" for element "p:graphicFrame" is not bound.]
   at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(Unknown Source)



Also I've noticed that, in the pptx which i created manually with powerpoint,
I got more parts besides presentation.xml . We still got preProps.xml, tableStyles.xml viewProps.xml.
I'm wondering should these parts be added by me with code, like presentation.xml?

Code: Select all
MainPresentationPart pp = (MainPresentationPart)presentationMLPackage.getParts().getParts().get(
            new PartName("/ppt/presentation.xml"));   
SlidePart slidePart = presentationMLPackage.createSlidePart(pp, layoutPart,
            new PartName("/ppt/slides/slide1.xml"));


Besides, do we have some examples about create table for me to learn?

Thx a lot!!

Re: add table to slide

PostPosted: Wed Jun 15, 2011 4:48 pm
by jason
What do p: and a: mean?

You need to declare these namespaces, by adding

Code: Select all
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"


ie

Code: Select all
String addGraphicFrame="<p:graphicFrame [NAMESPACES GO HERE]....

Re: add table to slide

PostPosted: Fri Jun 17, 2011 1:26 am
by qhfcrystal
Hi jason. Thx to your support, now i've managed to add the table.
I conclude all the experiences I got here.

1. with the unmarshal method, the reason that why I could not get result is:
(1) I ignored defining the namespace.

2. with the create object method, i found some element cannot be missing to fulfill the whole structure.
I past the basic structure to create table below, and I create 20 cell here:
Code: Select all
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p:sld xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
   <p:cSld>
      <p:spTree>
         <p:nvGrpSpPr>
            <p:cNvPr name="" id="1"/>
            <p:cNvGrpSpPr/>
            <p:nvPr/>
         </p:nvGrpSpPr>
         <p:grpSpPr>
            <a:xfrm>
               <a:off y="0" x="0"/>
               <a:ext cy="0" cx="0"/>
               <a:chOff y="0" x="0"/>
               <a:chExt cy="0" cx="0"/>
            </a:xfrm>
         </p:grpSpPr>
         <p:graphicFrame>
            <p:nvGraphicFramePr>
               <p:cNvPr name="1" id="0"/>
               <p:cNvGraphicFramePr>
                  <a:graphicFrameLocks noGrp="true"/>
               </p:cNvGraphicFramePr>
               <p:nvPr/>
            </p:nvGraphicFramePr>
            <p:xfrm>
               <a:off y="0" x="0"/>
               <a:ext cy="0" cx="0"/>
            </p:xfrm>
            <a:graphic>
               <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
                  <a:tbl>
                     <a:tblGrid>
                        <a:gridCol w="300000"/>
                        <a:gridCol w="300000"/>
                     </a:tblGrid>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                     <a:tr h="0">
                        <a:tc/>
                        <a:tc/>
                     </a:tr>
                  </a:tbl>
               </a:graphicData>
            </a:graphic>
         </p:graphicFrame>
      </p:spTree>
   </p:cSld>
</p:sld>


the corresponding code is:
Code: Select all
protected static Logger log = Logger.getLogger(pptHelloWorld.class);

   @SuppressWarnings( { "static-access", "unchecked" })
   public static void main(String[] args) throws Exception {

      String outputfilepath = System.getProperty("user.dir")
            + "/pptx-out.pptx";
      PresentationMLPackage presentationMLPackage = PresentationMLPackage
            .createPackage();
      // Need references to these parts to create a slide
      // Please note that these parts *already exist* - they are
      // created by createPackage() above. See that method
      // for instruction on how to create and add a part.
      MainPresentationPart pp = (MainPresentationPart) presentationMLPackage
            .getParts().getParts().get(
                  new PartName("/ppt/presentation.xml"));
      SlideLayoutPart layoutPart = (SlideLayoutPart) presentationMLPackage
            .getParts().getParts().get(
                  new PartName("/ppt/slideLayouts/slideLayout1.xml"));

      // OK, now we can create a slide
      SlidePart slidePart = presentationMLPackage.createSlidePart(pp,
            layoutPart, new PartName("/ppt/slides/slide1.xml"));
      SlidePart slidePart2 = presentationMLPackage.createSlidePart(pp,
            layoutPart, new PartName("/ppt/slides/slide2.xml"));
      
      //instatiation the  factory for later object creation.
      ObjectFactory objectFactory = new ObjectFactory();
      org.pptx4j.pml.ObjectFactory graphicObjectFactory = new org.pptx4j.pml.ObjectFactory();

      //Node Creation
      CTGraphicalObjectFrame graphicFrame = graphicObjectFactory
            .createCTGraphicalObjectFrame();
      org.pptx4j.pml.CTGraphicalObjectFrameNonVisual nvGraphicFramePr=graphicObjectFactory.createCTGraphicalObjectFrameNonVisual();
      org.docx4j.dml.CTNonVisualDrawingProps cNvPr=objectFactory.createCTNonVisualDrawingProps();
      org.docx4j.dml.CTNonVisualGraphicFrameProperties cNvGraphicFramePr=objectFactory.createCTNonVisualGraphicFrameProperties();
      org.docx4j.dml.CTGraphicalObjectFrameLocking graphicFrameLocks=new org.docx4j.dml.CTGraphicalObjectFrameLocking();
      org.docx4j.dml.CTTransform2D xfrm=objectFactory.createCTTransform2D();
      Graphic graphic = objectFactory.createGraphic();
      GraphicData graphicData = objectFactory.createGraphicData();
      CTTable ctTable = objectFactory.createCTTable();
      JAXBElement<CTTable> tbl = objectFactory.createTbl(ctTable);
      CTTableGrid ctTableGrid = objectFactory.createCTTableGrid();
      CTTableCol gridCol = objectFactory.createCTTableCol();
      CTTableRow ctTableRow = objectFactory.createCTTableRow();
      CTTableCell ctTableCell = objectFactory.createCTTableCell();
      
      //Build the parent-child relationship of this slides.xml
      graphicFrame.setNvGraphicFramePr(nvGraphicFramePr);
      nvGraphicFramePr.setCNvPr(cNvPr);
      cNvPr.setName("1");
      nvGraphicFramePr.setCNvGraphicFramePr(cNvGraphicFramePr);
      cNvGraphicFramePr.setGraphicFrameLocks(graphicFrameLocks);
      graphicFrameLocks.setNoGrp(true);
      nvGraphicFramePr.setNvPr(graphicObjectFactory.createNvPr());
      graphicFrame.setXfrm(xfrm);
      xfrm.setExt(objectFactory.createCTPositiveSize2D());
      xfrm.setOff(objectFactory.createCTPoint2D());
      graphicFrame.setGraphic(graphic);
      graphic.setGraphicData(graphicData);
      graphicData.setUri("http://schemas.openxmlformats.org/drawingml/2006/table");
      graphicData.getAny().add(tbl);
      ctTable.setTblGrid(ctTableGrid);
      ctTableGrid.getGridCol().add(gridCol);
      ctTableGrid.getGridCol().add(gridCol);
      gridCol.setW(300000);
      ctTableRow.getTc().add(ctTableCell);
      ctTableRow.getTc().add(ctTableCell);
      for(int i=0;i<20;i++){ctTable.getTr().add(ctTableRow);}

note: the for node <p:cNvPr>, the name attri will not added with default value when create the node. However, this attribute could not be missed.
In the same time, the width attri of <a:gridCol> should not be set as default value "0" or small value. It will also cause error when open document.

Basically, these are my experiences. Hope it will make help to pptx4j:)

One last question, jason, do u know the method to get the width of one slide?

Re: add table to slide

PostPosted: Fri Aug 26, 2011 1:26 am
by mjrobbins
Hi qhfcrystal

I've been trying to follow your example, but I'm a little stuck. The snippet you posted in your last post was incomplete - any chance you could post the end so I can see what you did?

Many thanks

Re: add table to slide

PostPosted: Sat Feb 11, 2012 4:57 am
by mil
Hi , ive been trying to a table to my pptx. But im not buidling the three, im using a xml file. I dont know where is my problem and i couldnt see an example of doing the table with an xml. So i will post the error and the code im using. It seems that its a problem with the references to openxmlformats.org. Im trying to see what is the problem. Here is the error im geting.


Code: Select all
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://schemas.openxmlformats.org/presentationml/2006/main", local:"graphicFrame"). Expected elements are <{http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing}anchor>,<{http://schemas.openxmlformats.org/drawingml/2006/main}blip>,<{http://schemas.openxmlformats.org/drawingml/2006/chart}chart>,<{http://schemas.openxmlformats.org/drawingml/2006/chart}chartSpace>,<{http://schemas.openxmlformats.org/presentationml/2006/main}cmAuthorLst>,<{http://schemas.openxmlformats.org/presentationml/2006/main}cmLst>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}colorsDef>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}colorsDefHdr>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}colorsDefHdrLst>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}dataModel>,<{http://schemas.openxmlformats.org/drawingml/2006/main}graphic>,<{http://schemas.openxmlformats.org/presentationml/2006/main}handoutMaster>,<{http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing}inline>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}layoutDef>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}layoutDefHdr>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}layoutDefHdrLst>,<{http://schemas.openxmlformats.org/drawingml/2006/compatibility}legacyDrawing>,<{http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas}lockedCanvas>,<{http://schemas.openxmlformats.org/presentationml/2006/main}notes>,<{http://schemas.openxmlformats.org/presentationml/2006/main}notesMaster>,<{http://schemas.openxmlformats.org/presentationml/2006/main}oleObj>,<{http://schemas.openxmlformats.org/drawingml/2006/picture}pic>,<{http://schemas.openxmlformats.org/presentationml/2006/main}presentation>,<{http://schemas.openxmlformats.org/presentationml/2006/main}presentationPr>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}relIds>,<{http://schemas.openxmlformats.org/presentationml/2006/main}sld>,<{http://schemas.openxmlformats.org/presentationml/2006/main}sldLayout>,<{http://schemas.openxmlformats.org/presentationml/2006/main}sldMaster>,<{http://schemas.openxmlformats.org/presentationml/2006/main}sldSyncPr>,<{http://schemas.openxmlformats.org/presentationml/2006/main}sp>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}styleDef>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}styleDefHdr>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}styleDefHdrLst>,<{http://schemas.openxmlformats.org/drawingml/2006/diagram}t>,<{http://schemas.openxmlformats.org/presentationml/2006/main}tagLst>,<{http://schemas.openxmlformats.org/drawingml/2006/main}tbl>,<{http://schemas.openxmlformats.org/drawingml/2006/main}tblStyleLst>,<{http://schemas.openxmlformats.org/drawingml/2006/main}theme>,<{http://schemas.openxmlformats.org/drawingml/2006/main}themeManager>,<{http://schemas.openxmlformats.org/drawingml/2006/main}themeOverride>,<{http://schemas.openxmlformats.org/drawingml/2006/chart}userShapes>,<{http://schemas.openxmlformats.org/presentationml/2006/main}viewPr>,<{http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing}wsDr>
   


And heres my code:

Code: Select all
      MainPresentationPart pp = (MainPresentationPart) presentationMLPackage
            .getParts().getParts()
            .get(new PartName("/ppt/presentation.xml"));

      SlideLayoutPart layoutPart = (SlideLayoutPart) presentationMLPackage
            .getParts().getParts()
            .get(new PartName("/ppt/slideLayouts/slideLayout1.xml"));

      // Create slide page titre
      SlidePart slidePart = presentationMLPackage.createSlidePart(pp,
            layoutPart, new PartName("/ppt/slides/slide4.xml"));
...
...

      String caseA = "caseA";
      String caseB = "caseB";
      String tableau;
      String part1 = "", part2 = "", part3 = "";
      String ligne = "";

      part1 = "<p:graphicFrame xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:nvGraphicFramePr><p:cNvPr id=\"11\" \"ame=\"Tableau 10\" /> <p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr><p:nvPr/></p:nvGraphicFramePr><p:xfrm><a:off x=\"762000\" y=\"1524000\"/><a:ext cx=\"7772400\" cy=\"4267200\"/></p:xfrm><a:graphic><a:graphicData ><a:tbl><a:tblPr firstRow=\"1\" bandRow=\"1\"><a:tableStyleId>{5940675A-B579-460E-94D1-54222C63F5DA}</a:tableStyleId></a:tblPr><a:tblGrid><a:gridCol w=\"1676400\"/><a:gridCol w=\"6096000\"/></a:tblGrid>";

      ligne = "<a:tr h=\"640080\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>"
            + caseA
            + "</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\" anchorCtr=\"1\"><a:solidFill><a:schemeClr val=\"bg1\"><a:lumMod val=\"85000\"/></a:schemeClr></a:solidFill></a:tcPr></a:tc><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>"
            + caseB
            + "</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\" anchorCtr=\"1\"><a:solidFill><a:schemeClr val=\"bg1\"><a:lumMod val=\"85000\"/></a:schemeClr></a:solidFill></a:tcPr></a:tc></a:tr>";

      part3 = "</a:tbl></a:graphicData></a:graphic></p:graphicFrame>";

      tableau = "" + part1 + ligne + ligne + part3;

      tableau = "<p:graphicFrame xmlns:uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"><p:nvGraphicFramePr><p:cNvPr id=\"11\" name=\"Tableau 10\"/><p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr><p:nvPr/></p:nvGraphicFramePr><p:xfrm><a:off x=\"762000\" y=\"1524000\"/><a:ext cx=\"7772400\" cy=\"4267200\"/></p:xfrm><a:graphic><a:graphicData ><a:tbl><a:tblPr firstRow=\"1\" bandRow=\"1\"><a:tableStyleId>{5940675A-B579-460E-94D1-54222C63F5DA}</a:tableStyleId></a:tblPr><a:tblGrid><a:gridCol w=\"1676400\"/><a:gridCol w=\"6096000\"/></a:tblGrid><a:tr h=\"640080\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>Étage</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\" anchorCtr=\"1\"><a:solidFill><a:schemeClr val=\"bg1\"><a:lumMod val=\"85000\"/></a:schemeClr></a:solidFill></a:tcPr></a:tc><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>Sommaire</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\" anchorCtr=\"1\"><a:solidFill><a:schemeClr val=\"bg1\"><a:lumMod val=\"85000\"/></a:schemeClr></a:solidFill></a:tcPr></a:tc></a:tr><a:tr h=\"853440\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>C</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr algn=\"ctr\"/><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>Bonne couverture</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc></a:tr><a:tr h=\"853440\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>C1</a:t></a:r></a:p><a:p><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr algn=\"ctr\"/><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>Bonne couverture</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc></a:tr><a:tr h=\"960120\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>P1</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr algn=\"ctr\"/><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>Bonne couverture</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc></a:tr><a:tr h=\"960120\"><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>P2</a:t></a:r><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc><a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr marL=\"0\" marR=\"0\" indent=\"0\" algn=\"ctr\" defTabSz=\"914400\" rtl=\"0\" eaLnBrk=\"1\" fontAlgn=\"auto\" latinLnBrk=\"0\" hangingPunct=\"1\"><a:lnSpc><a:spcPct val=\"100000\"/></a:lnSpc><a:spcBef><a:spcPts val=\"0\"/></a:spcBef><a:spcAft><a:spcPts val=\"0\"/></a:spcAft><a:buClrTx/><a:buSzTx/><a:buFontTx/><a:buNone/><a:tabLst/><a:defRPr/></a:pPr><a:r><a:rPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\" smtClean=\"0\"/><a:t>Bonne couverture</a:t></a:r></a:p><a:p><a:pPr algn=\"ctr\"/><a:endParaRPr lang=\"fr-CA\" sz=\"1400\" dirty=\"0\"/></a:p></a:txBody><a:tcPr anchor=\"ctr\"/></a:tc></a:tr></a:tbl></a:graphicData></a:graphic></p:graphicFrame>";
      
      CTGraphicalObjectFrame graphicFrame2=(CTGraphicalObjectFrame) XmlUtils.unmarshalString(tableau, Context.jcPML,CTGraphicalObjectFrame.class);
      
      Shape sample = ((Shape) XmlUtils
            .unmarshalString(tableau, Context.jcPML));
      
      
      
      //slidePart.getJaxbElement().getCSld().getSpTree().se
      slidePart.getJaxbElement().getCSld().getSpTree()
            .getSpOrGrpSpOrGraphicFrame().add(sample);


Re: add table to slide

PostPosted: Sat Feb 11, 2012 6:07 am
by jason
I added a table to a slide in Powerpoint, then in docx4j, marshalled the graphicFrame element to a string, then unmarshalled it again:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
                                        SlidePart slide = (SlidePart)pMLPackage.getParts().get(new PartName("/ppt/slides/slide1.xml") );
                                       
                                        org.pptx4j.pml.CTGraphicalObjectFrame graphicFrame = (org.pptx4j.pml.CTGraphicalObjectFrame) slide.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().get(0);
                                       
                                        String foo = XmlUtils.marshaltoString(graphicFrame, true, true, Context.jcPML,
                                                        "http://schemas.openxmlformats.org/presentationml/2006/main", "graphicFrame", org.pptx4j.pml.CTGraphicalObjectFrame.class);
                                       
                                        System.out.println(foo);
                                       
                                        org.pptx4j.pml.CTGraphicalObjectFrame graphicFrame2=(org.pptx4j.pml.CTGraphicalObjectFrame) XmlUtils.unmarshalString(foo, Context.jcPML, CTGraphicalObjectFrame.class);

 
Parsed in 0.016 seconds, using GeSHi 1.0.8.4


It works fine, provided you pass the CTGraphicalObjectFrame.class arg. Without that, I get an error similar to the one you posted.

Your problem is the line:

Code: Select all
Shape sample = ((Shape) XmlUtils.unmarshalString(tableau, Context.jcPML));


Your tableau is a p:graphicFrame (I'm not sure whether there's a typo in what you pasted, but you set it to part1 + ligne + ligne + part3, then immediately set it to something else). Since it is a p:graphicFrame, you need to pass the CTGraphicalObjectFrame.class arg to unmarshalString. And you can't cast it to a Shape!

hope this helps .. Jason

Re: add table to slide

PostPosted: Sat Feb 11, 2012 9:59 am
by mil
yeah i did that on purpose. At first i used a xml from a file and modified it . Then i saw it wasnt working so i just used the exact xml from a pptx(and i was too lasy to change the value so i overwrited it lol) ...

Ok so . when i use the exact xml (graphic frame tags ) it gives me an error where p isnt bound. fine it so i add this :
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"
and when i do this it gives me a corrupted pptx.

this is the xml of that corrupted file :
Code: Select all
<p:sld 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" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:ns5="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:ns9="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:ns10="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:ns11="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas">
- <p:cSld>
- <p:spTree>
- <p:nvGrpSpPr>
  <p:cNvPr name="" id="1" />
  <p:cNvGrpSpPr />
  <p:nvPr />
  </p:nvGrpSpPr>
- <p:grpSpPr>
- <a:xfrm>
  <a:off y="0" x="0" />
  <a:ext cy="0" cx="0" />
  <a:chOff y="0" x="0" />
  <a:chExt cy="0" cx="0" />
  </a:xfrm>
  </p:grpSpPr>
- <p:graphicFrame xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns9:CT_GraphicalObjectFrame">
- <a:graphic>
- <a:graphicData>
- <a:tbl>
- <a:tblPr bandRow="true" firstRow="true">
  <a:tableStyleId>{5940675A-B579-460E-94D1-54222C63F5DA}</a:tableStyleId>
  </a:tblPr>
- <a:tblGrid>
  <a:gridCol w="1676400" />
  <a:gridCol w="6096000" />
  </a:tblGrid>
- <a:tr h="640080">
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>Étage</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
- <a:tcPr anchorCtr="true" anchor="ctr">
- <a:solidFill>
- <a:schemeClr val="bg1">
  <a:lumMod val="85000" />
  </a:schemeClr>
  </a:solidFill>
  </a:tcPr>
  </a:tc>
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>Sommaire</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
- <a:tcPr anchorCtr="true" anchor="ctr">
- <a:solidFill>
- <a:schemeClr val="bg1">
  <a:lumMod val="85000" />
  </a:schemeClr>
  </a:solidFill>
  </a:tcPr>
  </a:tc>
  </a:tr>
- <a:tr h="853440">
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>C</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
  <a:pPr algn="ctr" />
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>Bonne couverture</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
  </a:tr>
- <a:tr h="853440">
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>C1</a:t>
  </a:r>
  </a:p>
- <a:p>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
  <a:pPr algn="ctr" />
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>Bonne couverture</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
  </a:tr>
- <a:tr h="960120">
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>P1</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
  <a:pPr algn="ctr" />
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>Bonne couverture</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
  </a:tr>
- <a:tr h="960120">
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>P2</a:t>
  </a:r>
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
- <a:tc>
- <a:txBody>
  <a:bodyPr />
  <a:lstStyle />
- <a:p>
- <a:pPr hangingPunct="true" latinLnBrk="false" fontAlgn="auto" eaLnBrk="true" rtl="false" defTabSz="914400" algn="ctr" indent="0" marR="0" marL="0">
- <a:lnSpc>
  <a:spcPct val="100000" />
  </a:lnSpc>
- <a:spcBef>
  <a:spcPts val="0" />
  </a:spcBef>
- <a:spcAft>
  <a:spcPts val="0" />
  </a:spcAft>
  <a:buClrTx />
  <a:buSzTx />
  <a:buFontTx />
  <a:buNone />
  <a:tabLst />
  <a:defRPr />
  </a:pPr>
- <a:r>
  <a:rPr smtClean="false" dirty="false" sz="1400" lang="fr-CA" />
  <a:t>Bonne couverture</a:t>
  </a:r>
  </a:p>
- <a:p>
  <a:pPr algn="ctr" />
  <a:endParaRPr dirty="false" sz="1400" lang="fr-CA" />
  </a:p>
  </a:txBody>
  <a:tcPr anchor="ctr" />
  </a:tc>
  </a:tr>
  </a:tbl>
  </a:graphicData>
  </a:graphic>
  </p:graphicFrame>
  </p:spTree>
  </p:cSld>
  </p:sld>


At first i was using a CTGraphicalObjectFrame but it was giving me a corrupted file so tthats when i tried a shape and tried lot of stuff but nothing worked...

Re: add table to slide

PostPosted: Sat Feb 11, 2012 10:04 am
by mil
I think it could help if you could paste the result of your system.out.

Re: add table to slide

PostPosted: Sat Feb 11, 2012 10:20 am
by mil
Something as simple like that gets corrupted (doesnt work)

Code: Select all
   <p:graphicFrame 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">
            <p:nvGraphicFramePr>
               <p:cNvPr id="4" name="Tableau 3" />
               <p:cNvGraphicFramePr>
                  <a:graphicFrameLocks noGrp="1" />
               </p:cNvGraphicFramePr>
               <p:nvPr />
            </p:nvGraphicFramePr>
            <p:xfrm>
               <a:off x="1524000" y="1397000" />
               <a:ext cx="959972" cy="741680" />
            </p:xfrm>
            <a:graphic>
               <a:graphicData
                  uri="http://schemas.openxmlformats.org/drawingml/2006/table">
                  <a:tbl>
                     <a:tblPr>
                        <a:tableStyleId>{073A0DAA-6AF3-43AB-8588-CEC1D06C72B9}
                        </a:tableStyleId>
                     </a:tblPr>
                     <a:tblGrid>
                        <a:gridCol w="479986" />
                        <a:gridCol w="479986" />
                     </a:tblGrid>
                     <a:tr h="370840">
                        <a:tc>
                           <a:txBody>
                              <a:bodyPr />
                              <a:lstStyle />
                              <a:p>
                                 <a:endParaRPr lang="fr-CA" dirty="0" />
                              </a:p>
                           </a:txBody>
                           <a:tcPr />
                        </a:tc>
                        <a:tc>
                           <a:txBody>
                              <a:bodyPr />
                              <a:lstStyle />
                              <a:p>
                                 <a:endParaRPr lang="fr-CA" />
                              </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:endParaRPr lang="fr-CA" />
                              </a:p>
                           </a:txBody>
                           <a:tcPr />
                        </a:tc>
                        <a:tc>
                           <a:txBody>
                              <a:bodyPr />
                              <a:lstStyle />
                              <a:p>
                                 <a:endParaRPr lang="fr-CA" dirty="0" />
                              </a:p>
                           </a:txBody>
                           <a:tcPr />
                        </a:tc>
                     </a:tr>
                  </a:tbl>
               </a:graphicData>
            </a:graphic>
         </p:graphicFrame>

Re: add table to slide

PostPosted: Tue Feb 28, 2012 6:39 am
by mil
Alright so now its working :D. I found what was the problem. It was when i was importing the library for ctgraphicalobjectframe.
instead of using import org.pptx4j.pml.CTGraphicalObjectFrame; . I think i was using import org.pptx4j.xml.CTGraphicalObjectFrame; or something like that well it was the wrong one (it was an import suggested by eclipse) So always be sure to doublecheck the imports :)

Re: add table to slide

PostPosted: Tue Jul 17, 2012 4:32 am
by mikeo
Jason;

I have been tasked to create a PPTX presentation with some tables and a graph from our database. I have been following the discussion you had earlier with "mil" and was wondering if you had a working set of code that I could use as a template for creating my application.

Re: add table to slide

PostPosted: Tue Jul 17, 2012 11:48 pm
by jason
Here is a sample which generates a table using each method:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting

package org.pptx4j.samples;


import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;

import org.apache.log4j.Logger;
import org.docx4j.XmlUtils;
import org.docx4j.dml.CTPoint2D;
import org.docx4j.dml.CTPositiveSize2D;
import org.docx4j.dml.CTTable;
import org.docx4j.dml.CTTableCell;
import org.docx4j.dml.CTTableCol;
import org.docx4j.dml.CTTableGrid;
import org.docx4j.dml.CTTableRow;
import org.docx4j.dml.Graphic;
import org.docx4j.dml.GraphicData;
import org.docx4j.openpackaging.packages.PresentationMLPackage;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.PresentationML.MainPresentationPart;
import org.docx4j.openpackaging.parts.PresentationML.SlideLayoutPart;
import org.docx4j.openpackaging.parts.PresentationML.SlidePart;
import org.pptx4j.jaxb.Context;
import org.pptx4j.pml.CTGraphicalObjectFrame;



/**
 * Demonstrates 2 methods of adding a table
 * to a slide.
 *
 */

public class Table  {
       
        protected static Logger log = Logger.getLogger(Table.class);
               
        public static void main(String[] args) throws Exception {

                // Where will we save our new .ppxt?
                String outputfilepath = System.getProperty("user.dir") + "/OUT_Table.pptx";
               
                // Create skeletal package, including a MainPresentationPart and a SlideLayoutPart
                PresentationMLPackage presentationMLPackage = PresentationMLPackage.createPackage();
               
                // Need references to these parts to create a slide
                // Please note that these parts *already exist* - they are
                // created by createPackage() above.  See that method
                // for instruction on how to create and add a part.
                MainPresentationPart pp = (MainPresentationPart)presentationMLPackage.getParts().getParts().get(
                                new PartName("/ppt/presentation.xml"));        
                SlideLayoutPart layoutPart = (SlideLayoutPart)presentationMLPackage.getParts().getParts().get(
                                new PartName("/ppt/slideLayouts/slideLayout1.xml"));
               
                // OK, now we can create a slide
                SlidePart slidePart = presentationMLPackage.createSlidePart(pp, layoutPart,
                                new PartName("/ppt/slides/slide1.xml"));
                               
                // Method 1 - programmatic
                slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add( getTable() );
               
                // Method 2 - from string - on slide 2
                SlidePart slide2 = presentationMLPackage.createSlidePart(pp, layoutPart,
                                new PartName("/ppt/slides/slide2.xml"));
                slide2.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add( createGraphicFrameFromString() );
               
                // All done: save it
                presentationMLPackage.save(new java.io.File(outputfilepath));

                System.out.println("\n\n done .. saved " + outputfilepath);
               
        }      
       
        public static CTGraphicalObjectFrame getTable() throws JAXBException {

                // instatiation the factory for later object creation.
                org.docx4j.dml.ObjectFactory dmlFactory = new org.docx4j.dml.ObjectFactory();
                org.pptx4j.pml.ObjectFactory pmlFactory = new org.pptx4j.pml.ObjectFactory();

                // Node Creation
                CTGraphicalObjectFrame graphicFrame = pmlFactory
                                .createCTGraphicalObjectFrame();
                org.pptx4j.pml.CTGraphicalObjectFrameNonVisual nvGraphicFramePr = pmlFactory
                                .createCTGraphicalObjectFrameNonVisual();
                org.docx4j.dml.CTNonVisualDrawingProps cNvPr = dmlFactory
                                .createCTNonVisualDrawingProps();
                org.docx4j.dml.CTNonVisualGraphicFrameProperties cNvGraphicFramePr = dmlFactory
                                .createCTNonVisualGraphicFrameProperties();
                org.docx4j.dml.CTGraphicalObjectFrameLocking graphicFrameLocks = new org.docx4j.dml.CTGraphicalObjectFrameLocking();
                org.docx4j.dml.CTTransform2D xfrm = dmlFactory.createCTTransform2D();
                Graphic graphic = dmlFactory.createGraphic();
                GraphicData graphicData = dmlFactory.createGraphicData();
               
                // Build the parent-child relationship of this slides.xml
                graphicFrame.setNvGraphicFramePr(nvGraphicFramePr);
                nvGraphicFramePr.setCNvPr(cNvPr);
                cNvPr.setName("1");
                nvGraphicFramePr.setCNvGraphicFramePr(cNvGraphicFramePr);
                cNvGraphicFramePr.setGraphicFrameLocks(graphicFrameLocks);
                graphicFrameLocks.setNoGrp(true);
                nvGraphicFramePr.setNvPr(pmlFactory.createNvPr());
               
//        <p:xfrm>
//        <a:off x="1524000" y="1397000"/>
//        <a:ext cx="6096000" cy="741680"/>
//      </p:xfrm>
                graphicFrame.setXfrm(xfrm);
               
                CTPositiveSize2D ext = dmlFactory.createCTPositiveSize2D();
                ext.setCx(6096000);
                ext.setCy(741680);
               
                xfrm.setExt(ext);
               
                CTPoint2D off = dmlFactory.createCTPoint2D();
                xfrm.setOff(off);
                off.setX(1524000);
                off.setY(1397000);
               
                graphicFrame.setGraphic(graphic);
               
                graphic.setGraphicData(graphicData);
                graphicData
                                .setUri("http://schemas.openxmlformats.org/drawingml/2006/table");
                               
                CTTable ctTable = dmlFactory.createCTTable();
                JAXBElement<CTTable> tbl = dmlFactory.createTbl(ctTable);
                graphicData.getAny().add(tbl);
               
                CTTableGrid ctTableGrid = dmlFactory.createCTTableGrid();              
                CTTableCol gridCol = dmlFactory.createCTTableCol();
                ctTable.setTblGrid(ctTableGrid);
                ctTableGrid.getGridCol().add(gridCol);
                ctTableGrid.getGridCol().add(gridCol);
                gridCol.setW(300000);

                CTTableRow ctTableRow = dmlFactory.createCTTableRow();
                ctTableRow.setH(370840);
               
               
                ctTableRow.getTc().add(createTableCell());
                ctTableRow.getTc().add(createTableCell());
               
                for (int i = 0; i < 4; i++) {
                        ctTable.getTr().add(ctTableRow);
                }
               
                return graphicFrame;
        }      

        public static CTTableCell createTableCell() throws JAXBException {
           String contents =
                "<a:tc  xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" +
                "<a:txBody>"
                +"<a:bodyPr/>"
                +"<a:lstStyle/>"
                +"<a:p>"
                  +"<a:r>"
                    +"<a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>"
                    +"<a:t>11</a:t>"
                  +"</a:r>"
                  +"<a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>"
                  +"</a:p>"
              +"</a:txBody>" +
              "</a:tc>";
              //+"<a:tcPr/>
           return ((CTTableCell)XmlUtils.unmarshalString(contents,org.docx4j.jaxb.Context.jc, CTTableCell.class));
               
        }
       
        public static CTGraphicalObjectFrame createGraphicFrameFromString() throws JAXBException {
               
                String tableau =
                             "<p:graphicFrame xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">" +
                             "        <p:nvGraphicFramePr>" +
                             "          <p:cNvPr id=\"4\" name=\"Table 3\"/>" +
                             "          <p:cNvGraphicFramePr>" +
                             "            <a:graphicFrameLocks noGrp=\"1\"/>" +
                             "          </p:cNvGraphicFramePr>" +
                             "          <p:nvPr/>" +
                             "        </p:nvGraphicFramePr>" +
                             "        <p:xfrm>" +
                             "          <a:off x=\"1524000\" y=\"1397000\"/>" +
                             "          <a:ext cx=\"6096000\" cy=\"741680\"/>" +
                             "        </p:xfrm>" +
                             "        <a:graphic>" +
                             "          <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">" +
                             "            <a:tbl>" +
                             "              <a:tblPr firstRow=\"1\" bandRow=\"1\">" +
                             "                <a:tableStyleId>{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}</a:tableStyleId>" +
                             "              </a:tblPr>" +
                             "              <a:tblGrid>" +
                             "                <a:gridCol w=\"3048000\"/>" +
                             "                <a:gridCol w=\"3048000\"/>" +
                             "              </a:tblGrid>" +
                             "              <a:tr h=\"370840\">" +
                             "                <a:tc>" +
                             "                  <a:txBody>" +
                             "                    <a:bodyPr/>" +
                             "                    <a:lstStyle/>" +
                             "                    <a:p>" +
                             "                      <a:r>" +
                             "                        <a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>" +
                             "                        <a:t>11</a:t>" +
                             "                      </a:r>" +
                             "                      <a:endParaRPr lang=\"en-AU\" 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-AU\" dirty=\"0\" smtClean=\"0\"/>" +
                             "                        <a:t>12</a:t>" +
                             "                      </a:r>" +
                             "                      <a:endParaRPr lang=\"en-AU\" 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-AU\" dirty=\"0\" smtClean=\"0\"/>" +
                             "                        <a:t>21</a:t>" +
                             "                      </a:r>" +
                             "                      <a:endParaRPr lang=\"en-AU\" 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-AU\" dirty=\"0\" smtClean=\"0\"/>" +
                             "                        <a:t>22</a:t>" +
                             "                      </a:r>" +
                             "                      <a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>" +
                             "                    </a:p>" +
                             "                  </a:txBody>" +
                             "                  <a:tcPr/>" +
                             "                </a:tc>" +
                             "              </a:tr>" +
                             "            </a:tbl>" +
                             "          </a:graphicData>" +
                             "        </a:graphic>" +
                             "      </p:graphicFrame>";

               
                return (CTGraphicalObjectFrame) XmlUtils.unmarshalString(tableau, Context.jcPML,
                                CTGraphicalObjectFrame.class);
               
        }
       
       
}

 
Parsed in 0.040 seconds, using GeSHi 1.0.8.4

Re: add table to slide

PostPosted: Wed Jul 18, 2012 3:55 am
by mikeo
Jason, you are Da Man. Ran your example and it worked as advertised. Thanks.

Re: add table to slide

PostPosted: Thu Jul 19, 2012 3:52 am
by mikeo
Jason;

I used your table example and was able to create a table with multiple rows and columns using the "programmatic" method. I am having difficulties setting the individual column widths. If I try and set the column width before I add the column, the last "gridCol.setW" sets the column width for all the columns. How do you set the individual columns widths and row heights?

gridCol.setW(914400); // 1 inch
ctTableGrid.getGridCol().add(gridCol); //Event Column
gridCol.setW(1828800); // 2 Inches
ctTableGrid.getGridCol().add(gridCol); //Flag column
gridCol.setW(2743200); // 3 inches
ctTableGrid.getGridCol().add(gridCol); //Exit column
gridCol.setW(3657600); // 4 inches
ctTableGrid.getGridCol().add(gridCol); //Notes column


From Slide 1 in the zip file I see
- <a:tblGrid>
<a:gridCol w="3657600" />
<a:gridCol w="3657600" />
<a:gridCol w="3657600" />
<a:gridCol w="3657600" />
</a:tblGrid>

Re: add table to slide

PostPosted: Sat Aug 18, 2012 12:20 am
by sebastian
That happens because you use the same object of gridCol for each column. If you want to have different column settings, you will need to create as much objects.
Thats how far as i have seen it.
For me, everything worked fine after looking and trying a lot of examples.

Greets,
sebastian