Solved

Using Word Automation - highlight a word + insert a comment

Posted on 2009-04-05
10
669 Views
Last Modified: 2013-12-17
Hi!

Can someone help me out? Im trying to open a word document and search for certain words in the document, and then highlight (make the background yellow) them, and add a comment. However, I don't know which functions I need to use for highlighting or adding a comment. I've only gotten so far as to calling Range.Find.Execute(), but I don't know what to do next.

Thanks
0
Comment
Question by:muskad202
  • 6
  • 4
10 Comments
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 24070955
You can first set the default highlight colour to yellow.
WrdApplication.Options.DefaultHighlightColorIndex = wdYellow

In the Find, set the .Format property of the Find object to True, and the .Replacement.Highlight to True.



0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 24070972
I don't know C#, but this is VBA for adding a Comment if the Find is successful.
Dim comm  As Word.Comment

Dim wrdDoc as Word.Document
 

'...

If MyRange.Find.Execute() then

   Set comm = ActiveDocument.Comments.Add(MyRange, MyCommentText)

End If

Open in new window

0
 
LVL 2

Author Comment

by:muskad202
ID: 24071565
Hi!
The code for highlight worked great - thanks!
Regarding adding the comments, what happens is, I initially start off with the range spanning the entire .doc (since i dont knoe where the word i want to find lies). If I then pass in the range to Comments.Add(), it ends up adding the comment for the entire document, instead of just the word. How do I work around this?

Thanks!
0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 24071665
Perhaps you could post your code. I have worked with C and Javascript, so I could probably read it well enough.
0
 
LVL 2

Author Comment

by:muskad202
ID: 24071726
The code is shown below.
The problem is that "range" is initialized to be the entire document, and so when i add a comment, it gets associated with the entire range. I guess what i need to do is - for each successful occurrence for the Find() operation, i need the range corresponding only to that, and then add a comment to that new range, instead of the originall range within which i did the Find().
oWordDoc = OpenDocument(documentPath, false);

range = oWordDoc.Range(ref missing, ref missing);

object item = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage;

object whichItem = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToFirst;

object forward = true;

object matchAllWord = true;

range.Document.GoTo(ref item, ref whichItem, ref missing, ref missing);

bool success = range.Find.Execute(ref oFindText, ref missing, ref matchAllWord, ref missing, ref missing, ref missing, ref forward, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

if (success)

{

   oWordDoc.Comments.Add(range, ref oComment);

}

oWordDoc.Close(ref oTrue, ref missing, ref missing);

Open in new window

0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 76

Accepted Solution

by:
GrahamSkan earned 75 total points
ID: 24072087
I would have thought that it would work. The operation depends on the Word Object model, and I would be surprised if the Find does not set the Range object to the found text in C#.

I have tried to replicate what you are doing in VBA in order to assure myself on the way that it works in that environment.  The only point I would make, and I don't know if it's relevant to your problem, is that the GoTo probably isn't necessary.
Sub FindAndComment()

    Dim oWordApp As Word.Application

    Dim oWordDoc As Word.Document

    Dim oRange As Word.Range

    Dim success As Boolean

    Dim strFindText As String

    Dim strComment As String

    

    strFindText = "fox"

    strComment = "Animal"

    Set oWordDoc = oWordApp.Documents.Open(documentPath)

    Set oRange = oWordDoc.Range

    success = oRange.Find.Execute(strFindText, , , , , True, True)

    If success Then

       oWordDoc.Comments.Add oRange, strComment

    End If

    oWordDoc.Close wdSaveChanges

End Sub

Open in new window

0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 24072181
I have run up VS.Net and tried C# for the first time by pasting your code into a button click event.

It gives 28 build errors because it doesn't know what 'oWordDoc', 'range', 'oFindText' and 'Office' are.

I guess that they have to be 'declared' somehow. Is that easy for you to explain, or would you rather wait for a C# expert to carry on with the question?
0
 
LVL 2

Author Comment

by:muskad202
ID: 24072256
I've attached my entire solution here. It's pretty small, so you can give it a try if you want.
MSWordPrototype.zip
0
 
LVL 2

Author Comment

by:muskad202
ID: 24072261
I just tried it - if I remove the GoTo, it works perfect! Thanks!!
0
 
LVL 76

Expert Comment

by:GrahamSkan
ID: 24072432
Thanks. I'll study your solution anyway.Perhaps it's time I got involved with .net
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Introduction This tutorial provides instructions on how to properly format your Word document using the inbuilt tools provided. The benefits of using these tools means your documents are more accessible and easily portable to other applications an…
This is written from a 'VBA for MS Word' perspective, but I am sure it applies to most other MS Office components where VBA is used.  One thing that really bugs me is slow code, ESPECIALLY when it's mine!  In programming there are so many ways to…
Learn how to make your own table of contents in Microsoft Word using paragraph styles and the automatic table of contents tool. We'll be using the paragraph styles in Word’s Home toolbar to help you create a table of contents. Type out your initial …
In a previous video Micro Tutorial here at Experts Exchange (http://www.experts-exchange.com/videos/1358/How-to-get-a-free-trial-of-Office-365-with-the-Office-2016-desktop-applications.html), I explained how to get a free, one-month trial of Office …

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now