gpt4 book ai didi

c# - Microsoft Word if 带有合并字段的语句不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:09 25 4
gpt4 key购买 nike

我正在尝试用 Microsoft Word (Microsoft.Office.Interop.Word dll) 和 C# 实现 IF 语句。我有一个模板如下 -
template image

我得到这样的结果 -
template result image

我的代码是这样的

 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();

我想要这样的结果-
expected result

有人可以帮我解决吗?

最佳答案

因此,如果 MERGEFIELD 字段名称在您的 valueDic 列表中,您想用它的名称替换 mergefield 吗?

如果是这样,我建议您接下来需要的是这样的东西(您可能需要更正语法)

if (valueDic.ContainsKey(fieldname))
{
Range rngFieldResult = myMergeField.Result;
myMergeField.Unlink();
Range.Text = valueDic[fieldName];
}

如果删除集合中的成员,您还需要验证字段迭代是否仍然有效。如果不是,您可能必须使用计数器向后迭代。您可能还需要注意您正在使用的任何范围的 TextRetrievalMode 的 IncludeFieldCodes 和 IncludeHiddenText 属性

(注意:如果您这样做,Word 会将 { IF Male = "Male"} 解释为 "Male"和 "Male"之间的字符串比较除非有一个名为“Male”的书签在这种情况下,它将书签值与“男性”进行比较)

关于c# - Microsoft Word if 带有合并字段的语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27186878/

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