我需要在 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 的任何错误或预防措施.
如果以前有人实现过类似的东西,请分享您的知识。
以下是对技术的一些见解:
- 该解决方案针对 MS Word Office 2010
- 必须用 .NET C# 3.5 编写
- 无法使用 Open Xml SDK,必须使用 Office Interop 进行修复
- 解决方案必须在不将整个文档设为只读的情况下实现预期目标
最佳答案
感谢您的回复,但是我只需要将合并字段设为只读,文档的其余部分仍应保持原样。
我的一个同事找到了一个很好的方法来实现我正在寻找的东西,只是分享它以防其他人可能需要这个功能:
您需要做的就是创建一个 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;
在下图中,合并字段托管在内容控件中,注意用户现在无法编辑该字段
关于c# - Word C# 中的只读合并字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352457/