【问题标题】:officer: this document contains fields that may refer to other files官员:本文档包含可能引用其他文件的字段
【发布时间】:2020-05-21 15:21:29
【问题描述】:

我正在使用 R 中令人惊叹的官员包创建 Microsoft Word 输出。我正在使用模板 Word 文档来指定大部分格式。

下面是一个代码 sn-p,它说明了我在做什么。

library("officer")

read_docx("Output Template Blank.docx") %>%
body_add_par(value = "Kaplan-Meier Analysis of Time (Months) to HSV-2 Episodes", style = "caption") %>%
body_add_flextable(my_km_table, align = "left") %>%
print("Kaplan-Meier Output.docx")

这通常效果很好。唯一的问题是打开文档会在 Word 中生成不需要的消息。

“此文档包含可能引用其他文件的字段。您要更新文档中的字段吗?”

我可以通过单击“是”来消除此问题,通过添加空格稍微更改文档,然后单击保存。不过,我宁愿不必手动执行此操作,并希望有更好的方法。前段时间我对此进行了调查,并记得有一种方法可以在 Microsoft Word 中将其关闭。我还记得这被视为一种安全风险。我不确定有多大风险。所以我想知道这是否是一个好的解决方案,或者是否真的有更好的方法。

【问题讨论】:

    标签: r ms-word officer


    【解决方案1】:

    出于安全原因,这是经过深思熟虑的设计决定。某些类型的 Word 字段可以访问外部数据。 Microsoft 在这一点上的政策是,打开文档(并承担风险)的责任在于用户 - 用户需要确定文档是否来自受信任的来源。

    因此,如果将字段设置为自动更新,则会显示一条消息,询问用户是否允许更新。

    可以插入字段并设置自动更新。在这种情况下,用户将需要手动更新字段,当打开任何文档时,可能会有一个插件来处理此问题。由于用户将选择安装插件,这又是用户的责任。

    抑制消息的唯一其他方法是在将文档传递给用户之前打开文档并更新字段。以编程方式,这可以使用 Word 自动化(不是服务器端)或在安装了 Word Automation Services 的本地版本的 SharePoint 中完成。

    【讨论】:

    • 谢谢。很详细的回答。可能很快就会接受这一点。当您说“可以插入字段而不设置自动更新”时,您能否详细说明您的意思?您是说可以通过 Microsoft Word 的高级选项禁用此功能吗?
    • @Paul 我不熟悉您使用的库,只熟悉 Open XML SDK 和 Word Open XML。在 SDK 的文档 docs.microsoft.com/en-us/dotnet/api/… 中有对后者的解释,它引用了 ECMA 标准,第 1 部分 17.15.1.90 (ecma-international.org/publications/standards/Ecma-376.htm) 基本上,这是一个省略设置选项的问题,而不是包括它。
    • 再次感谢。查看您发送的链接。我在想,如果我能够在我的模板 Word 文档中对 进行修改,那将会传递到由 print() 创建的新 Word 文档我的 R 代码中的函数。我需要考虑的一件事是是否尝试通过 R 或其他方式对 XML 进行更改。如果不是 R,我曾认为可以在 Word 本身中执行或使用 Open XML SDK 2.5 for Microsoft Office。在您看来,这些路线中的任何一条都是可行的吗?如果没有,有没有其他推荐的软件?
    • 我认为这可行,但您需要进行测试。我无法判断 R 是否是一个好工具,因为我不熟悉它。毫无疑问,Open XML SDK 可以做到这一点。如果它是一次性的(需要为这个文档删除该元素,一次),您甚至可以手动完成,而无需为其编写代码。
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2017-03-18
    • 1970-01-01
    • 2022-08-24
    相关资源
    最近更新 更多