C # word interop find and replace all

I have code to replace text inside the word 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); 

This works without formatting. But when the format {id} is formatted, it does not replace the text.

How can I make this code ignore formatting?

+9
source share
4 answers

I use this function for search and replace. You can specify any of the parameters.

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

And the use will be:

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

And you can use the FindAndReplace function again and again ....
Hope this helps.

+32
source

A method that divides a string if the string contains more than 255 characters.

  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); } 
+4
source

You can try the following:

 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(); 
+2
source

From Visual Studio 2013 you can do this:

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

(Posted in the interests of anyone, like me, who have come across this issue, but do not necessarily use the same versions of tools as the OP.)

+1
source

Source: https://habr.com/ru/post/955504/


All Articles