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

时间:2018-06-27 20:42:50

标签: c# ms-word openxml-sdk

我有一个Word文档,其中包含从第三方下载的宏。保存并打开文档后,它看起来不错,但是当我打印时,它会丢失与宏一起应用的数据,并显示“错误!找不到参考源!”。我发现如果按CTRL-A和CTRL-F11,它将锁定所有字段。之后,我去打印,数据就在那里。我想使用Open XML SDK实用程序加载此文档并将此锁定应用于word文档,然后再保存。这可能吗?我已经加载了文档,但是似乎找不到如何将字段设置为锁定状态。

1 个答案:

答案 0 :(得分:0)

无法锁定整个文档的字段-使用Word Open XML时需要分别锁定每个字段。它需要FieldLockFieldChar 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");

    }