c# - Word C# 中的只读合并字段

标签 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 进行修复
  • 解决方案必须在不将整个文档设为只读的情况下实现预期目标

最佳答案

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

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

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

关于c# - Word C# 中的只读合并字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352457/

相关文章:

c# - MS Word 2010 不显示图像

vb.net - 使用 Office Interop 将单元格写入 Excel 的最快方法?

c# - 在 .Net 中构建 Web 服务的首选方法是什么?

c# - 如何将 Web C# 位图对象保存到服务器磁盘

c# - 在 Xamarin android (xamarin.android.dll) 中使用 System.Web

vbscript - 使用 VBScript 关闭 Word 会留下临时的 Word 文档

c# - 基于字典的字符串操作

java - 将自定义形状添加到 JTextpane 并保存到新的 Word 文档

c# - 使用 Range.InsertParagraphAfter() 时出现 COM 异常

powershell - 从 Powershell 读取丢失的 Word 模板