如何在 C# 中使用 Open XML SDK 锁定 word 文档上的所有字段(CTRL-A、CTRL-F11)

How do I lock all fields (CTRL-A, CTRL-F11) on a word doc using Open XML SDK in C#

我有一个包含从第三方下载的宏的 word 文档。文档保存并打开后看起来不错,但是当我打印它时,它丢失了使用宏应用的数据并显示 "Error! Reference source not found!"。我发现如果我按下 CTRL-A 和 CTRL-F11,它会锁定所有字段。之后我去打印,我的数据就在那里。我想使用 Open XML SDK 实用程序加载此文档并在保存之前将此锁定应用于 word 文档。这可能吗?我正在加载文档,但我似乎无法找到如何将字段设置为锁定。

无法锁定整个文档的字段 - 使用 Word Open 时需要单独锁定每个字段 XML。它需要 FieldLock property of the FieldChar object

这对应于xml

<w:r>
  <w:fldChar w:fldCharType="start" w:fldLock="true"/>
</w:r>

以下代码段锁定文档中的所有域代码。

    using (WordprocessingDocument pkgDoc = WordprocessingDocument.Open(fileNameDoc, true))
    {
        int countFields = 0;
        Body body = pkgDoc.MainDocumentPart.Document.Body;
        FieldChar[] fieldchars = (FieldChar[]) body.Descendants<FieldChar>().ToArray();
        foreach (FieldChar fc in fieldchars)
        {
            fc.FieldLock = true;
            countFields++;
        }
        System.Diagnostics.Debug.Print(countFields.ToString() + " fields locked");

    }