使用' ContentControl.getOoxml'的正确方法是什么?跨越本地和在线Word?

时间:2017-10-17 19:21:06

标签: office-js word-addins

我目前正在开发一个使用ContentControl.getOoxml()的Word加载项,并且遇到了在线和本机环境之间的行为差​​异。在Word Online中,它仅返回OOXML等效的内容控件的内容,而在本机Word中,它返回OOXML等效的整个内容控件 - 内容和所有。换句话说,在前者中它的行为类似于getInnerHTML,在后者中它的行为类似于getOuterHTML

为了说明这个问题,我创建了一个简单的脚本,该脚本对包含两个内容控件的文档进行操作。它获取第一个OOXML,然后将其插入第二个:

Office.initialize = function (reason) {
    return Word.run(function (context) {

        // Load content controls in test document
        var contentControls = context.document.contentControls;
        context.load(contentControls, 'id');

        return context.sync().then(function () {

            // Get ooxml of first content control
            var ooxml = contentControls.items[0].getOoxml();

            return context.sync().then(function () {
                // Insert ooxml from first content control into second content control
                contentControls.items[1].insertOoxml(ooxml.value, 'replace');
                return context.sync();
            });
        });

    }).catch(function (error) {
        console.log('Error: ' + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log('Debug info: ' + JSON.stringify(error.debugInfo));
        }
    });
};

在本机Word中运行脚本时,您会注意到第二个内容控件最终内部包含第三个内容控件,其中包含第一个控件的内容。在Word Online中,它只有第一个控件的内容。

可以通过从空白文档开始并插入两个富文本内容控件(最好在第一个文本中,以便您可以看到更改)轻松创建测试文档,或者您可以使用我创建的test document

这两种情况肯定都很有用(事实上,我一直认为使用两种不同的方法会很酷,类似于getInnerHTMLgetOuterHTML(或{{1} } boolean参数指定要检索的内容),但在功能基于正在执行的环境时却没有那么多。

有没有办法确保各个环境的功能是一致的,如果没有,建议的替代方案?

0 个答案:

没有答案