OfficeJS Word Addin - 修改整个文档中的内容控件(包括页眉/页脚)

时间:2018-03-20 14:43:15

标签: api office-js office-addins word-2016

由于office API限制(API仅限于富文本内容控件)。我们必须将内容控件作为OOXML对象插入。它正确插入了内容控件,但Office API无法将其识别为内容控件。例如,使用office API,如果调用方法来获取所有内容控件,则不会返回上面的内容控件。

如果您运行以下代码,它将不会返回那些插入的内容控件。

// Run a batch operation against the Word object model.
Word.run(function (context) {  
     // Create a proxy object for the content controls collection.
     var contentControls = context.document.contentControls;
}

这是OOXML:

        <pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
        <pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
            <pkg:xmlData>
            <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
                <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml" />
            </Relationships>
            </pkg:xmlData>
        </pkg:part>
        <pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
            <pkg:xmlData>
            <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml">
                <w:body>
                <w:sdt>
                    <w:sdtPr>
                    <w:alias w:val="[REPLACE_THIS]" />
                    <w:id w:val="1382295294" />
                    <w:placeholder>
                        <w:docPart w:val="4D926923E99F45DBAF2203E4FEA73047" />
                    </w:placeholder>
                    <w:dataBinding w:xpath="[REPLACE_THIS]" w:storeItemID="{AFE97E21-6B3F-435F-8566-BD38F346ABE4}" />
                    <w:showingPlcHdr />
                    </w:sdtPr>
                    <w:sdtContent>
                    <w:p>
                        <w:r>
                        <w:t>[REPLACE_THIS]</w:t>
                        </w:r>
                    </w:p>
                    </w:sdtContent>
                </w:sdt>
                </w:body>
            </w:document>
            </pkg:xmlData>
        </pkg:part>
        </pkg:package>

由于Office API没有任何内置方法来获取这些内容控件并对其进行修改。我必须阅读文档的每个部分,获取OOXML,修改它并将其插回。有没有其他方法可以做到这一点?因为这是一个非常麻烦且容易出错的过程。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用OOXML插入其他类型的内容控件(即纯文本,组合,日期等),如果是这种情况,是的,在我们不支持的内容控件集合中,现在,富文本以外的其他类型的内容控件。这主要是因为Word Online中仅限于支持当前富文本的限制,我们提供的API可以保证多平台行为。计划是当它最终支持其他类型时,它们将作为集合的一部分包含在内(因此类型属性)。 所以,是的,现在唯一的出路是获取OOXML并通过XML处理其他类型的控件。如果用丰富的文本内容控件包装它们并且只获取包装器内容控件的OOXML,你可以定位你得到的OOXML。