我知道Opendope的事。当我以编程方式创建用repeater标记包装的段落时,这是可以的。当我尝试创建用表包装的repeater tr时,它抛出
org.docx4j.openpackaging.exceptions.Docx4JException: Problems applying bindings
at org.docx4j.model.datastorage.BindingTraverserXSLT.traverseToBind(BindingTraverserXSLT.java:237)
at org.docx4j.model.datastorage.BindingHandler.applyBindings(BindingHandler.java:292)
at org.docx4j.model.datastorage.BindingHandler.applyBindings(BindingHandler.java:216)
at org.docx4j.Docx4J.bind(Docx4J.java:554)
但是,当我保存文档,然后用docx4j.load()加载,然后绑定时,工作很好。
XMLutils中出现编辑问题。tr的DeepCopy sdtContent变为空
/*
* Losing content here?
*
* First, make absolutely sure that what you have is valid.
*
<w:tbl xmlns:dsp="http://schemas.microsoft.com/office/drawing/2008/diagram" xmlns:cppr="http://schemas.microsoft.com/office/2006/coverPageProps" xmlns:odx="http://opendope.org/xpaths" xmlns:c14="http://schemas.microsoft.com/office/drawing/2007/8/2/chart" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:odgm="http://opendope.org/SmartArt/DataHierarchy" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:we="http://schemas.microsoft.com/office/webextensions/webextension/2010/11" xmlns:pvml="urn:schemas-microsoft-com:office:powerpoint" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:comp="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:xvml="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:oda="http://opendope.org/answers" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:odc="http://opendope.org/conditions" xmlns:cdr="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:odi="http://opendope.org/components" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:odq="http://opendope.org/questions" xmlns:wetp="http://schemas.microsoft.com/office/webextensions/taskpanes/2010/11" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid">
<w:tblPr>
<w:tblStyle w:val="TableGrid"/>
<w:tblW w:w="0" w:type="auto"/>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="100"/>
</w:tblGrid>
<w:tr>
<w:tc>
<w:tcPr>
<w:tcW w:w="100" w:type="dxa"/>
</w:tcPr>
<w:p/>
</w:tc>
</w:tr>
<w:sdt>
<w:sdtPr>
<w:alias w:val="Repeat"/>
<w:tag w:val="od:repeat=x1"/>
<w:id w:val="2058423626"/>
</w:sdtPr>
<w:sdtContent>
<w:tr>
<w:sdt>
<w:sdtPr>
<w:alias w:val=""/>
<w:tag w:val="od:xpath=x0"/>
<w:id w:val="947420646"/>
<w:dataBinding w:xpath="/invoice[1]/items/item[1]/name" w:storeItemID="{bb8f553d-dc92-4c50-b1cb-06e77bbe149a}"/>
</w:sdtPr>
<w:sdtContent>
<w:tc>
<w:p/>
</w:tc>
</w:sdtContent>
</w:sdt>
</w:tr>
</w:sdtContent>
</w:sdt>
在JAXB中,内容控件有不同的Java对象,这取决于它们是包装块级、行级、单元格级还是运行级内容。这些对象都实现接口SDTelement。
类似地,SdtContent有不同的Java对象,这取决于它们是包装块级、行级、单元格级还是运行级内容。这些对象都扩展了SDTContent。
您必须使用正确的对象,否则正如您所注意到的,deepCopy将无法工作。
public class ContentControlFactory {
ObjectFactory wmlObjectFactory = getWmlObjectFactory();
public SdtPr createSdtPr(CTDataBinding dataBinding, String tag, String alias) {
SdtPr sdtPr = createSdtPr(tag, alias);
sdtPr.setDataBinding(dataBinding);
return sdtPr;
}
public SdtPr createSdtPr(String tag, String alias) {
Tag t = new Tag();
SdtPr.Alias a = new SdtPr.Alias();
a.setVal(alias);
t.setVal(tag);
SdtPr sdtPr = wmlObjectFactory.createSdtPr();
sdtPr.getRPrOrAliasOrLock().add(a);
sdtPr.setTag(t);
sdtPr.setId();
return sdtPr;
}
public SdtElement createRepeaterControl(Xpaths.Xpath repeaterXpath, Xpaths.Xpath xpath, Object template) {
return createSdt(
createSdtPr("od:repeat=" + repeaterXpath.getId(), "Repeat"),
createSdtContent(createContentControl(xpath, template))
);
}
public SdtElement createRepeaterControl(Xpaths.Xpath repeaterXpath, Object template) {
return createSdt(
createSdtPr("od:repeat=" + repeaterXpath.getId(), "Repeat"),
createSdtContent(template)
);
}
public SdtElement createContentControl(Xpaths.Xpath xpath, Object template) {
return createSdt(
createSdtPr(
createDataBinding(xpath.getDataBinding().getXpath(), xpath.getDataBinding().getStoreItemID()),
"od:xpath=" + xpath.getId(), ""),
createSdtContent(template));
}
public SdtContent createSdtContent(Object template) {
System.out.println(template.getClass().getName() );
SdtContent sdtContent = null;
if (template instanceof Tr) {
sdtContent = wmlObjectFactory.createCTSdtContentRow();
} else {
sdtContent = wmlObjectFactory.createSdtContentBlock();
}
sdtContent.getContent().add(template);
return sdtContent;
}
public SdtElement createConditionControl(Condition condition, Object template) {
return createSdt(
createSdtPr("od:condition=" + condition.getId(), ""),
createSdtContent(template)
);
}
public SdtElement createSdt(SdtPr sdtPr, SdtContent sdtContent) {
SdtElement sdtElement = null;
if (sdtContent instanceof CTSdtContentRow) {
sdtElement = wmlObjectFactory.createCTSdtRow();
} else {
sdtElement = wmlObjectFactory.createSdtBlock();
}
sdtElement.setSdtPr(sdtPr);
sdtElement.setSdtContent(sdtContent);
return sdtElement;
}
public CTDataBinding createDataBinding(String xPath, String storeItemID) {
CTDataBinding dataBinding = wmlObjectFactory.createCTDataBinding();
dataBinding.setXpath(xPath);//xPath - это строка с XPath до XML-элемента, связанного с этим Content Control
dataBinding.setStoreItemID(storeItemID);//storeItemID - это ID корневого XML-элемента, из которого нужно брать данные
return dataBinding;
}
}
问题内容: 我需要使用python编辑Excel工作簿。有没有这样做的方法,而无需阅读工作簿,编辑我想要的内容并将其写回?即有没有一种方法可以即时进行,因为我只需要在每张纸上编辑几个值? 我已经看过了,和,但他们似乎只支持(据我可以工作),阅读和写作不是编辑。我无法使用,因为我正在使用linux。 对库或特定的工作方式有何建议? 问题答案: xlutils有一个复制模块,可能会与您交错
我使用DOCX4J,我有docx与template for table,该模板包含将被替换的变量。 可以有几种类型,每种类型中都有许多引用。类型从来没有任何数量。 因此,首先,我想动态添加更多的单元格和列,然后用好的值绑定变量(值存储在TreeModel(DefaultTreeModel)中)。有办法做到这一点?可能会操纵我的docx的XML?我想保留模板的样式
问题内容: 我们有一个普通的独立spring应用程序,需要将jdbc数据源放在jndi中。(我们使用jboss treecache,它需要数据源位于jndi中)。 一些谷歌搜索人员发现了大多数使用Spring的jndi查找示例,其中已经在jndi中放置了一个对象(通过tomcat或应用服务器等),但是我们需要另外的方法:我有一个简单的数据源Spring bean,我将其注入到其他服务中,但我无法将
问题内容: 我正在尝试为我的应用程序创建一个帐户,在该帐户中我可以与我的帐户建立联系,例如facebook,viber,whatsapp等。我也希望我的帐户在设置的“帐户”部分中可见。有任何想法吗?我已经在Google上搜索了很多,但是找不到正确的答案从哪里开始。请帮忙。我试图创建一个帐户如下。这导致我出错。 问题答案: 您需要设置多个组件才能以编程方式创建一个帐户。你需要: AccountAut
我想在时钟到达特定时间之前中止我的Jenkins作业。我没有找到任何在指定时间自动停止它的东西(我不想手动执行)。有这样的事情吗? 我读过这篇文章,但没有一个答案能解决我的问题:如何在不重启服务器的情况下停止Jenkins上无法阻止的僵尸工作?
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 我需要使用python编辑Excel工作簿。有没有这样做的方法,而无需阅读工作簿,编辑我想要的内容并将其写回?即有没有一种方法可以即时进行,因为我只需要在每张纸上编辑几个值? 我已经看过了,和,但他们似乎只支持(据我可以工作),阅