c# - マージフィールドを含むステートメントが機能しない場合のMicrosoft Word

原文 c# .net ms-word office-interop mailmerge

マイクロソフトワード(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();


そして私はのような結果が欲しい-


誰かが解決策を手伝ってくれる?
答え
MERGEFIELDフィールド名がvalueDicリストにある場合、mergefieldをその名前で置き換えますか?

もしそうなら、私はあなたが次に必要とするものはこのようなものであることを提案します(あなたは構文を修正する必要があるかもしれません)

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


また、コレクションのメンバーを削除した場合でも、フィールドの反復が機能するかどうかを確認する必要があります。そうでない場合は、おそらくカウンタを使用して逆方向に反復する必要があります。また、使用している範囲のTextRetrievalModeのIncludeFieldCodesプロパティとIncludeHiddenTextプロパティに注意を払う必要がある場合もあります。

(注:これを行うと、「男性」と呼ばれるブックマークがない限り、Wordは{IF Male = "Male"}を「男性」と「男性」の間の文字列比較として解釈します。 "男性")
関連記事

c# - LINQ to SQL。実行時にテーブル名を変更する

javascript - MVCプロジェクトのアクションから返されたHTMLファイルのスクリプトへのパスが正しくありません

c# - ASP.NET Webアプリケーションをビルドして起動し、Microsoft CodedUIテストを効率的で時間のかからない方法で実行します

c# - mvc scaffolding rawをデータベースから削除

c# - Mathos Parser-文字を演算子として使用する

java - 相互互換性のためにC#暗号化をJava(Android)暗号化に変換するヘルプ

c# - Model3DCollectionとModel3DGroupの違いは何ですか?

c# - ASP.NET MVC(部分的なビュー)を使用して同じページにレビュー製品(http投稿)を追加しようとしています

c# - log4net翌日の開始時にログファイルを上書きする

c# - サービス時間を垣間見る方法