Word C中的只读合并字段#

时间:2011-12-02 06:15:18

标签: c# ms-word office-interop

我需要在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 个答案:

答案 0 :(得分:2)

感谢您的回复,但是我只需要将合并字段设为只读,文档的其余部分应保持原样。

我的一位同事找到了一个很好的方法来实现我想要的东西,只是分享它以防其他人可能需要这个功能:

您需要做的就是创建一个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

答案 1 :(得分:0)

使用Locked属性只会阻止字段的更改,我假设这不是你想要的。

我知道阻止字段代码更改的唯一方法是保护文档。字段本身应该仍然是可更新的。