【问题标题】:`context.document.body.insertOoxml` breaks documents, crashes word`context.document.body.insertOoxml` 破坏文档,使单词崩溃
【发布时间】:2017-05-08 21:46:21
【问题描述】:

我知道这不是问题,但我是由 Rick Kirkham 从here 发送到这里的,显然询问 SO 是为 Microsoft 产品提交错误的方法:-p

当我将insertOoxml 与'replace' 参数一起使用时,Word 将在末尾插入额外的内容。例如,在Script Lab 中使用以下代码时,带有一个新的空word 文档:

$("#run").click(run);

function run() {
    Word.run(function (context) {
        var ooxml = context.document.body.getOoxml();
        return context.sync().then(function () {
            console.log(ooxml.value.length);
            context.document.body.insertOoxml(ooxml.value, Word.InsertLocation.replace);
            return context.sync();
        });
    });
}

每次触发此代码时,word 文档都会在正文末尾获得一个额外的段落。当文档以内容控件结尾时会变得更疯狂:获取一个新文档,插入一个新的富文本内容控件。触发run 将复制内容控件并将其插入到自身内部(因此您有两个内容控件,其中一个包含在另一个内容控件中)。单击run 几次将创建大量嵌套的内容控件并减慢 Word 爬行速度。插入纯文本内容控件并触发 'run' 两次会导致单词崩溃(似乎是空指针解引用)。

这不是与 Script Lab 相关的问题,但使用 Script Lab 是重现它的最简单方法。

Word 版本:1703,内部版本 7967.2139,2016 MSO (16.0.7927.1020) 32 位。

预期行为:Word 不会崩溃,也不会引入额外内容。

好的,让我们提出一个问题:如何在不破坏文档的情况下使用完整文档 insertOoxml(ooxml, 'replace')?

【问题讨论】:

  • 感谢您将问题移至此处。无论结果是错误还是有简单的解决方法,遇到相同症状的其他人都会看到这一点(以及它的最终结果)。我们有一个现有的错误,其中“替换”选项(使用 insertOoxml)实际上并没有替换。由于您的问题,产品团队已经提高了它的优先级。关于崩溃,是否发生在 Script Lab 之外?
  • 我不确定为什么 Michael Zlatkovsky 编辑我的帖子以添加“scriptlab”标签,因为我明确提到问题不相关。但是,是的,这个问题也发生在 Script Lab 之外。我在开发一个显然无法发布源代码的专有 office-js 插件时发现了这个问题。 Script Lab 在这里仅用于创建一个展示崩溃行为的最小示例。当插入的 ooxml 不符合 Word 的喜好时,insertOoxml 操作通常会使 Word 崩溃很多(在内容控件上使用它时也是如此)。
  • 至少摆脱奇怪的嵌套内容控制问题(和相关的崩溃)的解决方法似乎是首先在文档末尾插入一个新段落,其中包含一些非空内容(我选择了一个零宽度的空格,但任何非空字符串都可以),然后执行getOoxml(),也许是一些ooxml更改,然后insertOoxml(ooxml, 'replace'),然后你继续从文档末尾删除段落,直到你'已经删除了你插入的那个,可以通过它的文字内容来识别(insertOoxml诱导段落克隆不会复制文字内容)。

标签: office-js scriptlab


【解决方案1】:

我用较新的版本验证了 Word 不会崩溃,但确实添加了一个额外的空段落。此错误已于昨天解决,该修复程序将在下个月提供。谢谢!

【讨论】:

  • 我是否理解当文档以纯文本内容控件结尾时它也能正常工作? :)
猜你喜欢
  • 2015-12-16
  • 2023-03-29
  • 1970-01-01
  • 2014-07-21
  • 2021-01-02
  • 1970-01-01
  • 2012-11-02
  • 2018-12-28
  • 1970-01-01
相关资源
最近更新 更多