排查Word加载项问题

本文讨论Word特有的故障排除问题。 使用页面末尾的反馈工具建议可添加到本文的其他问题。

无法识别所有选定的区域

如果进行了非连续选择,Word API 仅在所选内容中的最后一个连续范围上运行。 这种情况的一个意外情况是,选择表中的列,然后调用 Document.getSelection,API 仅返回所选内容中的最后一个单元格。 尽管列的选择看起来是连续的,但 API 会将其识别为非连续选择 (例如,每行的单元格) 。

若要详细了解如何进行非连续选择,请参阅 如何选择彼此不相邻的项目

批注不起作用

如果批注 API 不起作用,可能是因为未使用 Microsoft 365 订阅。 如果你使用的是一次性购买许可证,这可能是这些 API 不适合你的原因。

注释 API 依赖于需要 Microsoft 365 订阅的服务。 因此,在进一步调试之前,请在连接到 Microsoft 365 订阅许可证Word运行加载项。

有关此问题的详细信息,请参阅 GitHub 问题 4953

根据设计, Body.insertFileFromBase64 方法排除源文件中的任何页眉或页脚。

若要包含源文件中的任何页眉或页脚,请改用 Document.insertFileFromBase64

无法使用 Mixed 设置属性

Word中的多个枚举提供“Mixed”作为有效值。 但是,在获取属性或进行 get* API 调用时,主要可以返回值。 这是因为“混合”意味着将多个选项应用于当前选定内容。 如果尝试将选项设置为“Mixed”,则不清楚应将哪个实际值应用于所选内容。

例如,假设你正在处理文本部分周围的边框。 每个 边框 可以设置为不同的 宽度。 如果上边框为“Pt025” (即) 0.25 磅,则底部边框为“无”,左边框和右边框为“Pt050” (即) 0.50 磅,则当获得边框宽度时,将返回“Mixed”。 如果要更改边框的宽度,请使用 除 以外的 mixed枚举值在每个边框上调用集 API。

此行为也适用于枚举值,例如“Unknown”。

使用样式时获取 GeneralException

如果用户在外接程序调用 Document.insertFileFromBase64 或 Style API 时遇到 GeneralException,则可能是这些用户超出了 Word 应用程序施加的限制。 若要了解有关这些限制的详细信息,请参阅 Word 中的作参数限制和规范

当光标位于标头的内容控件中时,使用 insertHtml 布局中断

满足以下三个条件时,可能会出现此问题。

  1. 页眉中至少有一个内容控件,Word文档的页脚中至少有一个内容控件。
  2. 确保光标位于标头中的内容控件内。
  3. 调用 insertHtml 以在页脚中设置内容控件。

然后,页脚意外地与页眉混合。 若要避免这种情况,请在设置页脚之前清除内容控件,如以下代码示例所示。

await Word.run(async (context) => {
    // Credit to https://github.com/barisbikmaz for this version of the workaround.
    // For more information, see https://github.com/OfficeDev/office-js/issues/129.

    // Let's say there are 2 content controls in the header and 1 in the footer.
    const contentControls = context.document.contentControls;
    contentControls.load();

    await context.sync().then(function () {
        // Clear the 2 content controls in the header.
        contentControls.items[0].clear(); 
        contentControls.items[1].clear();

        // Clear the control control in the footer then update it.
        contentControls.items[2].clear();
        contentControls.items[2].insertHtml('<p>New Footer</p>', 'Replace');
    });
});

列表或最后一个段落中最后一个项目符号的格式丢失

如果列表中最后一个项目符号或最后一个段落的格式在指定的正文或区域中丢失,检查如果使用 Body.insertFileFromBase64Range.insertFileFromBase64。 如果是这样,请更新代码以改用 Document.insertFileFromBase64

响应中 null 属性值的含义

nullWord JavaScript API 中具有特殊含义。 它用于表示默认值或无格式。

当指定区域中存在不同的值时,格式设置属性(如颜色)将包含null响应中的值。 例如,如果你检索某个区域并加载其 range.font.color 属性:

  • 如果区域中的所有文本具有相同的字体颜色, range.font.color 则指定该颜色。
  • 如果该区域内存在多种字体颜色,则 range.font.colornull

本机 JavaScript API 不适用于Word。桌子

Word。Table 对象不同于 HTML 表对象。 用于与 HTML 表交互的本机 JavaScript API 不能用于管理Word。Table 对象。 相反,必须使用Word对象模型中提供的表 API 来与Word交互。表和相关对象。

同样,请勿使用 Word JavaScript API 与 HTML 表对象交互。

形状 API 找不到形状

文档中有形状,但出于某种原因,使用 API 获取形状(例如 context.document.body.shapes),结果是找到 0 个形状。

一种可能性是Word模板已过时。 如果从默认模板创建了一个新文档,但在Word窗口的标题栏中看到“兼容模式”,请考虑更新默认模板。

Word窗口的标题栏中显示的兼容模式。

若要更改默认模板,请参阅 更改 Normal 模板 (Normal.dotm)

  1. 按照说明查找“普通”模板在计算机上的位置。

  2. 确保关闭Word。

  3. 在文件资源管理器或类似应用程序中重命名Normal.dotm。 或者,可以移动到 Normal.dotm 另一个位置。

    重要

    由于你重命名或移动Normal.dotm了 ,Word会在下次打开Word时自动创建一个新版本。 原始 Normal.dotm 版本中的任何自定义项都不会转移到新版本,因此需要将自定义项添加到新模板。

  4. 打开Word并使用默认模板创建新文档。 不应再看到“兼容模式”。

  5. 使用形状 API 重试运行代码。

另请参阅