Как заблокировать все поля (CTRL-A, CTRL-F11) в документе Word, используя Open XML SDK в C # - PullRequest
0 голосов
/ 27 июня 2018

У меня есть текстовый документ, который содержит макросы, загруженные от третьей стороны. После того, как документ сохранен и открыт, он выглядит великолепно, но когда я его распечатываю, он теряет данные, которые были применены с макросом, и показывает «Ошибка! Источник ссылки не найден!». Я обнаружил, что если я нажму CTRL-A и CTRL-F11, он заблокирует все поля. После этого я иду на печать, и мои данные там. Я хотел бы использовать утилиту Open XML SDK, чтобы загрузить этот документ и применить эту блокировку к текстовому документу перед его сохранением. Это возможно? У меня загружен документ, но я просто не могу найти, как установить блокировку полей.

1 Ответ

0 голосов
/ 28 июня 2018

Нет способа заблокировать поля для всего документа - каждое поле должно быть заблокировано индивидуально при работе с Word Open XML. Требуется свойство FieldLock объекта FieldChar .

Это соответствует 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");

    }
...