Page 1 of 1

Adding comments to spreadsheets

PostPosted: Sat Mar 26, 2011 2:06 am
by arimmer
I'm trying to add comments to a spreadsheet but the 'comments' part does not appear to be in xslx4j.

That's not a problem, I successfully created a class which extends
Code: Select all
JaxbSmlPart<CTComments>
but either I've not done everything I need to do in the subclass or there is something else I need to do, because I keep getting null pointer errors when I try to add it to the spreadsheet for saving.

The code I'm using is :
Code: Select all
Parts parts = pkg.getParts();
    Part workSheet = parts.get( new PartName( "/xl/worksheets/sheet1.xml") );
    RelationshipsPart wsRP = workSheet.getRelationshipsPart();
    if( wsRP == null ){
      wsRP = new RelationshipsPart();
      workSheet.setRelationships( wsRP );
    }
    comments.setRelationshipType( "http://schema.openxmlformats.org/officeDocument/2006/relationships/comments" );
    ContentTypeManager ctm = pkg.getContentTypeManager();
    CTOverride ctOv = new CTOverride();
    ctOv.setContentType( "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml" );
    ctOv.setPartName( "/xl/comments.xml" );
     URI uRI = null;
    try
    {
     uRI = new URI("/xl/comments.xml");
    }
    catch (URISyntaxException e)
    {
      e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
    ctm.addOverrideContentType( uRI, ctOv);
    Relationship rel = wsRP.addPart( comments, true,  ctm ); // This is throwing the Null Pointer Exception

    workSheet.addTargetPart( comments );


comments is an instance of my subclass of JaxbSmlPart<CTComments> (which just has the constuctor which takes a PartName).

The error I get is :
Code: Select all
JAXB: Using Java 6 implementation.
java.lang.NullPointerException
   at org.docx4j.openpackaging.parts.relationships.RelationshipsPart.addPart(RelationshipsPart.java:485)
   at org.docx4j.openpackaging.parts.relationships.RelationshipsPart.addPart(RelationshipsPart.java:462)
   at com.lmco.xslxout.EsSpreadSheet.save(EsSpreadSheet.java:153)
   at com.lmco.ar.playground.CreateSpreadsheet.doCreate(CreateSpreadsheet.java:27)
   at com.lmco.ar.playground.PlayGroundMain$4.actionPerformed(PlayGroundMain.java:125)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6263)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:6028)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4630)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


I'm obviously missing something related to relationships but I'm not sure what. Could you please give me some pointers as to what to add or do differently?

Re: Adding comments to spreadsheets

PostPosted: Mon Mar 28, 2011 10:46 pm
by arimmer
I have made some progress with this, by using a different method call to create the worksheet relationship part (passing in the worksheet to the constructor) and now only get an error from actual save to file:

Code: Select all
javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.internal.SAXException2: unable to marshal type "org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation]
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:317)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243)
   at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)
   at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:177)
   at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:154)
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:200)
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:188)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:362)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:377)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:377)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:158)
   at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:87)
   at com.lmco.xslxout.EsSpreadSheet.save(EsSpreadSheet.java:168)
   at com.lmco.ar.playground.CreateSpreadsheet.doCreate(CreateSpreadsheet.java:27)
   at com.lmco.ar.playground.PlayGroundMain$4.actionPerformed(PlayGroundMain.java:125)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6263)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:6028)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4630)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:236)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:305)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314)
   ... 42 more
org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:330)
   at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:158)
   at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:87)
   at com.lmco.xslxout.EsSpreadSheet.save(EsSpreadSheet.java:168)
   at com.lmco.ar.playground.CreateSpreadsheet.doCreate(CreateSpreadsheet.java:27)
   at com.lmco.ar.playground.PlayGroundMain$4.actionPerformed(PlayGroundMain.java:125)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6263)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:6028)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4630)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:330)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:377)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   ... 30 more
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:330)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:377)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   ... 32 more
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Problem saving part xl/comments.xml
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:258)
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:188)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:362)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   ... 34 more
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.internal.SAXException2: unable to marshal type "org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation]
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:317)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243)
   at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)
   at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:177)
   at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:154)
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:200)
   ... 37 more
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:236)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:305)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314)
   ... 42 more
org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:330)
   at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:158)
   at org.docx4j.openpackaging.io.SaveToZipFile.save(SaveToZipFile.java:87)
   at com.lmco.xslxout.EsSpreadSheet.save(EsSpreadSheet.java:168)
   at com.lmco.ar.playground.CreateSpreadsheet.doCreate(CreateSpreadsheet.java:27)
   at com.lmco.ar.playground.PlayGroundMain$4.actionPerformed(PlayGroundMain.java:125)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6263)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:6028)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4630)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:330)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:377)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   ... 30 more
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:330)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:377)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   ... 32 more
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Problem saving part xl/comments.xml
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:258)
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:188)
   at org.docx4j.openpackaging.io.SaveToZipFile.savePart(SaveToZipFile.java:362)
   at org.docx4j.openpackaging.io.SaveToZipFile.addPartsFromRelationships(SaveToZipFile.java:325)
   ... 34 more
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.internal.SAXException2: unable to marshal type "org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation]
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:317)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243)
   at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)
   at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:177)
   at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:154)
   at org.docx4j.openpackaging.io.SaveToZipFile.saveRawXmlPart(SaveToZipFile.java:200)
   ... 37 more
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:236)
   at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:305)
   at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)
   at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314)
   ... 42 more


Is this something I can correct or is it something not implemented in xlsx4j because it was not expected that comments would need to be output?

Re: Adding comments to spreadsheets

PostPosted: Tue Mar 29, 2011 12:56 am
by jason
Sorry I haven't replied - I was intending to in the last few hours, but my Win 7 laptop is only booting in safe mode this evening, and i've been preoccupied investigating that :-(

Anyway, you can easily fix the error

"org.xlsx4j.sml.CTComments" as an element because it is missing an @XmlRootElement annotation.


Open the class org.xlsx4j.sml.CTComments, and add
Code: Select all
@XmlRootElement(name="comments")

immediately above the line
Code: Select all
public class CTComments

Re: Adding comments to spreadsheets

PostPosted: Wed Mar 30, 2011 4:26 am
by arimmer
I've downloaded the source and made the change you suggested, but I am having problems compiling it :(

I had to download and install Maven (which I have done), but I'm getting the following error
Code: Select all
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from C:\Program Files\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from C:\Documents and Settings\{username}\.m2\settings.xml
[WARNING] Command line option -cpu is deprecated and will be removed in future Maven versions.
[DEBUG] Using local repository at C:\Documents and Settings\{username}\.m2\repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for C:\Documents and Settings\{username}\.m2\repository
[INFO] Scanning for projects...
[WARNING] The POM for org.jvnet.wagon-svn:wagon-svn:jar:1.8 is missing, no dependency information available
[DEBUG] org.jvnet.wagon-svn:wagon-svn:jar:1.8:
[DEBUG]    org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[DEBUG] Looking up lifecyle mappings for packaging jar from ClassRealm[plexus.core, parent: null]
[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 60, column 12
[ERROR] Unresolveable build extension: Plugin org.jvnet.wagon-svn:wagon-svn:1.8 or one of its dependencies could not be resolved: Failure to find org.jvnet.wagon-svn:wagon-svn:jar:1.8 in http://repo1.maven.org/maven2 was cached in the local repository,


And being new to Maven I have no idea what to do to solve this, even after looking at the suggested cwiki entries.

Is there anything you can suggest? [Sorry this is rather wandering from the original topic]

Re: Adding comments to spreadsheets

PostPosted: Wed Mar 30, 2011 8:18 am
by jason
arimmer wrote:[ERROR] Unresolveable build extension: Plugin org.jvnet.wagon-svn:wagon-svn:1.8 or one of its dependencies could not be resolved: Failure to find org.jvnet.wagon-svn:wagon-svn:jar:1.8 in http://repo1.maven.org/maven2 was cached in the local repository,


I don't know why its not finding wagon, but you can comment that out in the pom.

Alternatively, you can build with ant; you'll need to adjust some paths in build.xml.

Re: Adding comments to spreadsheets

PostPosted: Wed Mar 30, 2011 11:47 pm
by jason
Following Lars' recent post in the docx4j forum, I've updated pom,xml with http://dev.plutext.org/trac/docx4j/changeset/1454

With this change, mvn install works for me.

Re: Adding comments to spreadsheets

PostPosted: Thu Mar 31, 2011 12:13 am
by jason
Added Comments Part: http://dev.plutext.org/trac/docx4j/changeset/1455
1456 will be the @XmlRootElement annotation..

Re: Adding comments to spreadsheets

PostPosted: Thu Mar 31, 2011 1:59 am
by arimmer
Thanks. Commenting it out worked so I can save comments but for some reason MS Excel won't display them!

If I open the spreadsheet with my added comment I don't see the comment (nor the red triangle) but if I then do 'save as' a different file name, my comment is saved as part of the zipped XML file!

I've done my best to make my comments 'look' the same as MS Excels - same attributes, file names, etc. but nothing has worked.

I noticed that MS Excel also saves the 'red triangle' for each comment in a vmlDrawing1.vml file - but I can't reproduce it as I can't find the classes for x:ClientData (CTClientData) and it's child elements. Are these part of docX4j?

Re: Adding comments to spreadsheets

PostPosted: Thu Mar 31, 2011 11:46 pm
by jason
Both the comments part and the VML part should be added to the relevant worksheet part.

If you use the comments part class I added yesterday (adding it with AddTargetPart), it should set up the correct relationship type, and the necessary entries in the content types (though I haven't tested it).

I notice the worksheet also contains a reference to the VML: <legacyDrawing r:id="rId1"/>

Re vmlDrawing1.vml and the x:ClientData:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
<xml xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel">
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout><v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202"
 path="m,l,21600r21600,l21600,xe">
  <v:stroke joinstyle="miter"/>
  <v:path gradientshapeok="t" o:connecttype="rect"/>
 </v:shapetype><v:shape id="_x0000_s1025" type="#_x0000_t202" style='position:absolute;
 margin-left:59.25pt;margin-top:1.5pt;width:108pt;height:59.25pt;z-index:1;
 visibility:hidden' fillcolor="#ffffe1" o:insetmode="auto">

  <v:fill color2="#ffffe1"/>
  <v:shadow on="t" color="black" obscured="t"/>
  <v:path o:connecttype="none"/>
  <v:textbox style='mso-direction-alt:auto'>
   <div style='text-align:left'></div>
  </v:textbox>
  <x:ClientData ObjectType="Note">
   <x:MoveWithCells/>
   <x:SizeWithCells/>
   <x:Anchor>
    1, 15, 0, 2, 3, 31, 4, 1</x:Anchor>
   <x:AutoFill>False</x:AutoFill>
   <x:Row>0</x:Row>
   <x:Column>0</x:Column>
  </x:ClientData>
 </v:shape></xml>

 
Parsed in 0.003 seconds, using GeSHi 1.0.8.4


It is strange: note the root element is "xml" (without any namespace).

One way to handle it would be to store that part as a file in your file system, then load it into a BinaryPart (named vmlDrawing1.vml), with a rel of type http://schemas.openxmlformats.org/offic ... vmlDrawing.

That's what xlsx4j does when loading an xlsx containing it.

Make sure your [Content_Types].xml contains:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
<Default Extension="vml" ContentType="application/vnd.openxmlformats-officedocument.vmlDrawing" />
 
Parsed in 0.000 seconds, using GeSHi 1.0.8.4


Do this by calling getContentTypeManager() on your spreadsheet package object... then addDefaultContentType

hope this helps .. Jason

Re: Adding comments to spreadsheets

PostPosted: Sun Apr 03, 2011 6:47 pm
by jason
Changes 1458-1464 add a JAXB representation of a VML part, including classes for x:ClientData etc.

So a VML part isn't treated as a binary part anymore. (Though the easiest way to construct the content listed earlier in this thread will still be to read it from a file)

http://www.documentinteropinitiative.or ... .2.17.aspx says

The root element for a part of this content type shall be xml in the null namespace, encapsulating an arbitrary amount of VML markup as defined by this Standard.

[Example: Consider the following VML Drawing part:

<xml>
<v:shape ...>
...
</v:shape>
...
</xml>

end example]

As http://mailman.vse.cz/pipermail/sc34wg4 ... 02192.html says:

> >VML drawing parts (Part 4, ยง8.1) can be validated against RELAX NG
> >schemas, but cannot be validated against XSD schemas. This is because
> >there are no XSD schemas for the unqualified xml element, which is
> >the root element of VML drawing parts


So I've created an XSD definition for it, which the VML part uses.

cheers .. Jason

Re: Adding comments to spreadsheets

PostPosted: Tue Nov 27, 2012 11:17 pm
by pforprasad
Do we have final code snippet for adding comments to spreadsheets, I've just need the same thing to do, and trying to use docx4j API.
and have no prior knowledge of docx4j

Re: Adding comments to spreadsheets

PostPosted: Thu Nov 29, 2012 5:29 pm
by pforprasad
hi Jason,

I got one sample code (http://www.docx4java.org/trac/docx4j/browser/trunk/docx4j/src/main/java/org/docx4j/samples/CommentsSample.java) for .docx file to add comments into that, do can you please guide me to do same thing with .xlsx.

Regards