gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:14:52 25 4
gpt4 key购买 nike

我需要在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com