Только для чтения поля слияния в Word C # - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть требование для создания полей слияния только для чтения в Word.

Я уже пытался использовать свойство Locked, которое можно увидеть ниже. Описание этого свойства гласит - Когдаполе заблокировано, вы не можете обновить результаты поля , что звучит как идеально подходящее для моей проблемы, но это не похоже на работу

Ниже приведен код, который я использую для добавления поля слияния в MS Word:

using Word = Microsoft.Office.Interop.Word;  

Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
Word.MailMerge merge = Globals.ThisAddIn.Application.ActiveDocument.MailMerge;
merge.Fields.Add(currentRange, selectedNode.LocalName).Locked = true;

После запуска приведенного выше кода и создания поля в Word я по-прежнему могу щелкнуть по нему правой кнопкой мыши и выбрать «Редактировать поле», где я могу потенциально переименовать поле или выполнить другие изменения без получениялюбые ошибки или предупреждения Word.

Edit Field is enabled

Если кто-то реализовал что-то подобное ранее, поделитесь своими знаниями.

Вот некоторые сведения о технологиях:

  • Решение предназначено для MS Word Office 2010
  • Оно должно быть написано на .NET C # 3.5
  • Невозможно использовать Open Xml SDK, исправление должно бытьвыполняется с использованием Office Interop
  • Решение должно достигать желаемых целей, не делая весь документ доступным только для чтения

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Спасибо за ответы, однако мне нужно было только сделать поля слияния доступными только для чтения, остальная часть документа должна оставаться как есть.

Мой коллега нашел хороший способ добиться того, что я искал, просто поделился им на тот случай, если кому-то еще понадобится эта функция:

Все, что вам нужно сделать, это создать объект ContentControl и добавить поле слияния в элемент управления контентом. Установите для свойства LockContents значение true. Это свойство используется для определения, разрешено ли пользователю редактировать содержимое элемента управления содержимым.

using Word = Microsoft.Office.Interop.Word;

object missing = System.Type.Missing;

Word.Selection PosRange = Globals.ThisAddIn.Application.Selection;
Microsoft.Office.Interop.Word.ContentControl cntCtrl;
cntCtrl = PosRange.Range.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText, ref missing);

object fldType = Microsoft.Office.Interop.Word.WdFieldType.wdFieldMergeField;
object fldText = "Employee";
Microsoft.Office.Interop.Word.Field fld = cntCtrl.Range.Fields.Add(cntCtrl.Range, ref fldType, ref fldText);
cntCtrl.LockContents = true;

На изображении ниже поле слияния размещено внутри элемента управления контентом, обратите внимание, что пользователи теперь не могут редактировать поле

Update and Edit field are disabled

0 голосов
/ 03 декабря 2011

Использование свойства Locked только предотвратит изменение значения поля, что, как я предполагаю, не то, что вы хотите. код от изменения заключается в защите документа.Сами поля все еще должны быть обновляемыми.

...