我正在尝试使用microsoft word(Microsoft.Office.Interop.Word dll)和c#实现IF语句。我有一个模板如下 -
我得到的结果是这样的 -
我的代码就像这样
Dictionary<String, String> valueDic = new Dictionary<string, string>();
valueDic.Add("Gender", "Male");
Object oMissing = System.Reflection.Missing.Value;
Object oTemplatePath = @"E:\\ContactTemplate2.docx";
Application wordApp = new Application();
Document wordDoc = new Document();
wordDoc = wordApp.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Field myMergeField in wordDoc.Fields)
{
Range rngFieldCode = myMergeField.Code;
String fieldText = rngFieldCode.Text;
if (fieldText.StartsWith(" MERGEFIELD"))
{
Int32 endMerge = fieldText.IndexOf("\\");
Int32 fieldNameLength = fieldText.Length - endMerge;
String fieldName = fieldText.Substring(11, endMerge - 11);
fieldName = fieldName.Trim();
if (valueDic.ContainsKey(fieldName))
{
myMergeField.Select();
wordDoc.Application.Selection.TypeText(valueDic[fieldName]);
}
else
{
myMergeField.Select();
wordDoc.Application.Selection.TypeText(" ");
}
}
}
wordDoc.SaveAs(@"E:\\myfile.docx");
wordApp.Application.Quit();
我希望结果像 -
有人可以帮我解决问题吗?
答案 0 :(得分:0)
因此,如果MERGEFIELD字段名称在您的valueDic列表中,您想要用其名称替换mergefield吗?
如果是这样,我建议你需要的下一件事是这样的(你可能需要纠正语法)
if (valueDic.ContainsKey(fieldname))
{
Range rngFieldResult = myMergeField.Result;
myMergeField.Unlink();
Range.Text = valueDic[fieldName];
}
如果删除集合的成员,还需要验证字段迭代是否仍然有效。如果没有,您可能需要使用计数器向后迭代。您可能还需要注意您正在使用的任何范围的TextRetrievalMode的IncludeFieldCodes和IncludeHiddenText属性
(注意:如果你这样做,Word会将{IF Male =“Male”}解释为“男性”和“男性”之间的字符串比较,除非有一个名为“男性”的书签在这种情况下,它会将书签值与“男性”进行比较)