Replace text in word textbox objects using VSTO and C#
- by Roberto
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