Replace text in word textbox objects using VSTO and C#

Posted by Roberto on Stack Overflow See other posts from Stack Overflow or by Roberto
Published on 2010-06-08T20:25:08Z Indexed on 2010/06/08 21:12 UTC
Read the original article Hit count: 494

Filed under:
|
|

Hi,

I have to find/replace text from a word document. It works fine for plain text spread through the document, however when the text is in a textbox, the standard find/replace approach doesn't reach it.

I found a vba solution, however since I am working in C#, I would like to find a solution in C#. The word document is in 2007 format and my visual studio is 2010. I am using .Net Framework 3.5, but if required, I can consider moving to 4.0.

Here is the code for the find/replace that only works with plain text (not in word textbox objects):

object Missing = System.Reflection.Missing.Value;
object fileToOpen = (object)@"c:\doc.docx";
object fileToSave = (object)@"c:\doc.docx";

Word.Application app = new Word.ApplicationClass(); Word.Document doc = new 
Word.Document();

try
{
   doc = app.Documents.Open(ref fileToOpen,
                   ref Missing, ref Missing, ref Missing, ref Missing,
                   ref Missing, ref Missing, ref Missing, ref Missing,
                   ref Missing, ref Missing, ref Missing, ref Missing,
                   ref Missing, ref Missing, ref Missing);

   object replaceAll = Word.WdReplace.wdReplaceAll;
   app.Selection.Find.ClearFormatting();
   app.Selection.Find.Text = "MyTextForReplacement";
   app.Selection.Find.Replacement.ClearFormatting();
   app.Selection.Find.Replacement.Text = "Found you!";

   app.Selection.Find.Execute(
                ref Missing, ref Missing, ref Missing, ref Missing, ref Missing,
                ref Missing, ref Missing, ref Missing, ref Missing, ref Missing,
                ref replaceAll, ref Missing, ref Missing, ref Missing, ref Missing);

I also tried using the below code, but didn't work as well:

 foreach(Word.Shape s in app.ActiveDocument.Shapes)
 {
   if(s.TextFrame.HasText >= 1) //The value is always 0 or -1, and even leaving 0 go forward,
   // it doesn't work, because there is no text in there...
   {
       foreach(Word.Field f in s.TextFrame.TextRange.Fields)
       {
            switch( f.Type)
            {
        .
        .     //I never reached this point
        .
            }
       }
    }

Any help will be appreciated...

Thanks,

-- Roberto Lopes

© Stack Overflow or respective owner

Related posts about c#

Related posts about textbox