c#word interop查找并替换所有内容

我有一些代码来替换单词2010 docx中的文本。

object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, "document.docx"); Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true }; Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true); aDoc.Activate(); Microsoft.Office.Interop.Word.Find fnd = wordApp.ActiveWindow.Selection.Find; fnd.ClearFormatting(); fnd.Replacement.ClearFormatting(); fnd.Forward = true; fnd.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue; fnd.Text = "{id}"; fnd.Replacement.Text = "123456"; fnd.Execute(Replace: WdReplace.wdReplaceAll); 

这没有格式化。 但是当{id}被格式化时,它不会替换文本。

如何使此代码忽略格式化?

我用这个函数来查找和替换。 您可以指定任何选项。

 private void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, object findText, object replaceWithText) { //options object matchCase = false; object matchWholeWord = true; object matchWildCards = false; object matchSoundsLike = false; object matchAllWordForms = false; object forward = true; object format = false; object matchKashida = false; object matchDiacritics = false; object matchAlefHamza = false; object matchControl = false; object read_only = false; object visible = true; object replace = 2; object wrap = 1; //execute find and replace doc.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace, ref matchKashida ,ref matchDiacritics, ref matchAlefHamza, ref matchControl); } 

用法是:

 object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, "document.docx"); Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true }; Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(fileName, ReadOnly: false, Visible: true); aDoc.Activate(); FindAndReplace(wordApp, "{id}", "12345"); 

你可以反复使用FindAndReplace函数….
希望这可以帮助。

一种方法,如果字符串包含超过255个字符,则对字符串进行分割。

  void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, string findText, string replaceWithText) { if (replaceWithText.Length > 255) { FindAndReplace(doc, findText, findText + replaceWithText.Substring(255)); replaceWithText = replaceWithText.Substring(0, 255); } //options object matchCase = false; object matchWholeWord = true; object matchWildCards = false; object matchSoundsLike = false; object matchAllWordForms = false; object forward = true; object format = false; object matchKashida = false; object matchDiacritics = false; object matchAlefHamza = false; object matchControl = false; object read_only = false; object visible = true; object replace = 2; object wrap = 1; //execute find and replace doc.Selection.Find.Execute(findText, ref matchCase, ref matchWholeWord, ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, replaceWithText, ref replace, ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl); } 

你可以试试这个:

 var doc = new Microsoft.Office.Interop.Word.Application().Documents.Open("document.docx"); doc.Content.Find.Execute( "{id}", false, true, false, false, false, true, 1, false, "12345", 2, false, false, false, false); doc.Save(); 

从Visual Studio 2013中,您可以执行以下操作:

 Microsoft.Office.Interop.Word.Range range = this.Application.ActiveDocument.Content; range.Find.ClearFormatting(); range.Find.Execute(FindText: "find text", ReplaceWith: "replace text", Replace: Word.WdReplace.wdReplaceAll); 

(发布给任何人的利益,像我一样,遇到过这个问题,但不一定使用与OP相同版本的工具。)