首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -替换IfField中的mergefield

C# -替换IfField中的mergefield
EN

Stack Overflow用户
提问于 2016-05-09 06:55:43
回答 1查看 1.9K关注 0票数 0

我使用Word文档作为模板,如下所示:

代码语言:javascript
复制
Hello my name is {MERGEFIELD Name /*MERGEFORMAT}
{IF {MERGEFIELD Gender /*MERGEFORMAT} = "M" 
"Your gender is {MERGEFIELD Gender /*MERGEFORMAT}" ""}

我的C#程序看起来像:

代码语言:javascript
复制
Microsoft.Office.Interop.Word.Document documentWord = application.Documents.Open(myWordTemplate);
//Gender and Name are dynamic fields for the example
var myDynamicFields = dbContext.MyFields.All();
foreach (Microsoft.Office.Interop.Word.Field field in documentWord.Fields)
{
    foreach (var item in myDynamicFields)
    {
          //Search for a "Name" or "Gender" field
          if (field.Code.Text.Contains(item.Key))
          {
               field.Select();
               text = item.Value + " ";
               application.Selection.TypeText(text);

               break;
          }
     }       
}

因此,我的问题是,我的代码只检测2个Mergefield :名称MergeField和字段if。如果是的话,我想替换一下Mergefield的性别。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 17:05:50

您的代码不能工作的原因是If字段的字段代码也包含合并字段。因此,Select正在摆脱If字段及其MergeField,因此在循环重复时没有需要查找的Mergefield

最好是检查Field.Type属性。我还冒昧地优化了您的代码,这样您就不需要实际显示字段代码了。

使用Range对象,您可以将范围的TextRetrievalMode设置为包含字段代码,这样就不需要显示它们。我的代码示例将字段的范围设置为另一个Range对象,删除该字段,然后写入该范围。

(由于我无法访问您的数据库信息,下面的代码需要修改,但我相信这对您来说没有问题。我已经将您的代码放在注释中,以及您的评论中,这样您就可以自己定位了。)

代码语言:javascript
复制
Word.Range rngDocBody = doc.Content;
Word.Range rngField = null;
rngDocBody.TextRetrievalMode.IncludeFieldCodes = true;
foreach (Word.Field field in rngDocBody.Fields)
{
        //Search for a "Name" or "Gender" field
        if (field.Type == Word.WdFieldType.wdFieldMergeField)
        {
            rngField = field.Result;
            //field.Select();
            //doc.Application.Selection.TypeText("X");
            field.Delete();
            rngField.Text = "X";
           // break;
        }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37109476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档