私がやろうとしているのは、Microsoft Word ドキュメント内の特定の文字列のすべての出現箇所を見つけて置き換えることができるアプリケーションを作成することです。
これまでに選択したのは、Microsoft.Office.Interop.Word アセンブリを使用することです。それは機能しますが、私が望む方法とは正確には異なります。問題は、部分文字列を照合して置換していることです。
これまでの私のコードは次のとおりです。
foreach (DataRow drCrossWalkItem in dtCrossWalk.Rows)
{
foreach (Word.Range myStoryRange in doc.StoryRanges)
{
myStoryRange.Find.MatchWholeWord = true;
myStoryRange.Find.MatchPrefix = false;
myStoryRange.Find.MatchSuffix = false;
myStoryRange.Find.Text = drCrossWalkItem["strOldValue"].ToString();
myStoryRange.Find.Replacement.Text = drCrossWalkItem["strNewValue"].ToString();
myStoryRange.Find.Wrap = Word.WdFindWrap.wdFindContinue;
myStoryRange.Find.Execute(Replace: Word.WdReplace.wdReplaceAll);
}
}
doc.SaveAs2(strFinalPath);
doc.Close(ref missing, ref missing, ref missing);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(doc);
したがって、ほとんどのシナリオで完全に機能しますが、私が抱えている問題は次の例にあります。
Document Text:
test_item_one
test_item_one_two_three
「test_item_one」を「hello」に置き換えたいとします。現在のプログラムでは、両方の行を次のように置き換えます。
Document Text:
hello
hello_two_three
どうやら一致する「単語全体」には_が含まれていません。Microsoft Word で検索/置換を試みる場合と同じです。この特定のシナリオを解決する別のオプションがあるかどうか、何か考えはありますか?