Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在邮件合并字段名中使用句点?_C#_.net_Ms Word_Office Interop_Mailmerge - Fatal编程技术网

C# 如何在邮件合并字段名中使用句点?

C# 如何在邮件合并字段名中使用句点?,c#,.net,ms-word,office-interop,mailmerge,C#,.net,Ms Word,Office Interop,Mailmerge,我有一个合并字段名列表,连同一个Word文档一起传递到我的应用程序中。合并字段包括句点和下划线,格式为“Here.Is.An.Example.Merge\u Field”。这些分隔符是必需的-字符可以更改,但不能完全删除 其中几个合并字段包含在为文档创建的数据源中。数据源没有为合并字段名保存数据-合并本身发生在流程中的其他位置 我将文档附加到数据源,如下所示: WordApplication.MailMerge.OpenDataSource(DataFilePath); 这会根据需要将合并字段

我有一个合并字段名列表,连同一个Word文档一起传递到我的应用程序中。合并字段包括句点和下划线,格式为“Here.Is.An.Example.Merge\u Field”。这些分隔符是必需的-字符可以更改,但不能完全删除

其中几个合并字段包含在为文档创建的数据源中。数据源没有为合并字段名保存数据-合并本身发生在流程中的其他位置

我将文档附加到数据源,如下所示:

WordApplication.MailMerge.OpenDataSource(DataFilePath);
这会根据需要将合并字段加载到菜单中,但所有句点都已消失。我现在有了“HereisAnampleMerge_字段”,这会在我的应用程序的其他点上引起问题


如何防止Word删除这些字符?

我认为您不能,因为合并字段名称已修改为有效的书签名称,这有一定的限制

(例如,有关讨论,请参见,除本例外,我认为Word将在首字母“ux”之前插入一个“M”。此外,长度超过40个字符的名称会被篡改以生成唯一的名称。)

因此,做什么真正取决于你所面临的问题

您可以从ActiveDocument.MailMerge.DataSource.DataFields或.fieldnames中检索Word实际使用的字段名(即其损坏的名称)。AFAIK这些字段与数据源中的字段顺序相同,即使Word有时会重新排列字段以在“编辑收件人”对话框中显示(例如,它会按特定顺序对其认为是地址字段名的字段名进行排序)。因此,这应该允许您将其字段名与原始字段名相匹配

或者,如果代码需要在邮件合并主文档中插入{MERGEFIELD}字段,并且知道数据源中字段的顺序,则可以使用字段号(1表示Word等检索的第一个字段),例如{MERGEFIELD 1}。但请注意,因为我从未见过微软在任何地方记录过该设施