Introduction
Language Integrated Query (LINQ) is one of the main features of Microsoft .NET
Framework 3.5.
As you perhaps already know, LINQ lets you execute queries onto a larger number
of data sources. Among the big amount of data sources we can query, we can also,
in example, query Microsoft Word 2007 document properties. This is possible when
developing a document-level solution with Visual Studio 2008 Tools for Office
System.
VSTO are now part of Visual Studio 2008 IDE (Professional edition or greater is
needed). Until 2005 edition, you had to download and install VSTO as separate
components, but now this is no more necessary.
First of all, open Visual Studio 2008 and create a new Word 2007 Document
project (you can find this project template in the Office folder). You can
choose to create a new document or import an existing one.
In this article we're going to consider a Word 2007 document which contains
revisions applied from two different people (in this case, two user accounts on
my pc). Each of the reviewer applied his own corrections. As you can see in the
following figure, first reviewers revisions are red marked, while second
reviewers' revisions are blue marked:
First of all, you should add a button onto the document. You can drag a Windows
Forms button from the toolbox onto the document surface, as you can see in the
above figure. Now we decide to extract and count only revisions applied by the
user "Alessandro". The Click event handler could be written in the following
way:
Private
Sub
Button1_Click(ByVal
sender
As
System.Object,
ByVal
e As
System.EventArgs)
Handles
Button1.Click
Dim
allRevisions =
From
rev As
Word.Revision
In
Me.Revisions
_Where
rev.Author =
"Alessandro"
_Select
rev.Range.Text
Dim
result
As
String
=
String.Empty
For
Each
singleRevision
In
allRevisions
result +=
String.Concat(singleRevision,
Environment.NewLine)
Next
MessageBox.Show(result,
"Alessandro
has applied the following revisions",
MessageBoxButtons.OK,MessageBoxIcon.Information)
End
Sub
The sample expression you saw in the above
code snippet queries the Revisions collection. For each revision, the query
expression selects its text if the author of the revision itself is the user
"Alessandro". Finally, a dialog box informs about the revisions made by this
user.
If you think that using this programming technique is quite boring and not
useful at all, just think that by the same way you can query not only all the
collections which a Microsoft Word document exposes but also data contained in
an Excel 2007 workbook. In this case, you could also use the Join keyword to
take pieces of data from different collections and then join them.