Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
Microsoft Word is a remarkable tool for building documents. Think about this for a minute. Word supports headers and footers, table of contents, and indexes. You can embed charts and images. It has a huge set of formatting tools, and the list just goes on and on. I've used Word automation successfully on many projects as a reporting engine, including creating hundreds of report templates for a large insurance company. Let me show you what it can do. In this demo, I'm going to create a Word 2010 document-based project.
I'm going to go to File > New > Project. I'm going to choose Office 2010 and Word Document. Then I'm going to use a copy of an existing document, which is out on our Desktop, in our Exercise Files folder, and then over here in our Assets folder. I'm going to use this Shipping Bill of Record and then click OK.
So as you can see, it's opened up the Word UI inside Visual Studio. I can see the content of my document. And over here, you can see that I have a copy of the docx file. I also have a code behind file called ThisDocument.vb. Now here is the goal. I want to be able to take these bold sections of the document-- Date, and Customer, and Shipper name--and I want to be able to replace those at runtime. So the user would open up this document, and I would calculate today's date and put it at this location.
Then I would want to pull the customer name out and store it here, and down here, I want to have the shipper name. So, what I can do is insert something called a bookmark. To do that, I'm going to go over to my Toolbox, and I'm going to go up to the Word Controls section right up here. I'm going to find this Bookmark, and I'm going to drag it over and drop it on Date. It says, "Make a selection or place the insertion point where you want to add a Bookmark control. Then click OK." So again, I can come over here and select that, if it wasn't selected already, and then click OK.
Now, you notice that there are some gray square brackets around the word "Date". I'm going to give this a name that makes sense, dateBookmark, and I'll do the same for Customer--Bookmark. Lastly, I'll do one for the shipper. Double- click, drag, and then click OK, and I'm going to call this one shipperBookmark.
Now next, I want to add some UI that'll go on the right edge of my Word document. These are called action panes. If I go to my project and right-click and say Add > New Item, you can see that there is a list of common elements here, and there is one up here at the top called Action Pane Control.
You can also see that there's some Office things like the Ribbon, Ribbon (XML), Style Sheets, and other items. I'm going to click on Action Pane Control and then give it a new name. I'm going to call this one ShipperPane and then click Add. It has a designer surface where I can add any valid Windows Forms controls. So, I'm going to put a label over here. Now, I'm going to sort my properties in alphabetical order to make things easier to find, and then I'm going to type in "Choose Shipper", and then below that, I'm going to put a list box.
Then I'm going to go click on the Items (Collection), click on this button that has the three dots on it, and I'm going to type in the names of my shippers "FedEx", "UPS", "USPS", and "Clairs Couriers", and then click OK. Now let's save this application. I'm going to save this out into my Desktop folder > Exercise Files > chapter 12 > movie number 02, and then click Save.
Now, I'm going to write a little bit of code on this ShipperPane, and then now I'm going to test the application. So I'm going to choose the ShipperPane again, and I'm going to go to the SelectedIndexChanged property. I double-click on that item, and what I'm going to do is I'm going to find those bookmarks. To do that, I'm going to use the special keyword called "Globals." and then my bookmark names, ThisDocument--that refers to the current document--dot.
There is my shipperBookmark. I'm going to replace the text that's in that, and I'm going to put in the text that's in my list box. So I'll choose ListBox1.SelectedItem. Let's review. The user is going to click on something in the pane. This event's going to fire. We're going to figure out which item they selected. We're going to get its text and apply it to the shipperBookmark. Let me save my application one more time, and let's test this out.
I'm going to press F5 to run the application, and there is our document. I do not see the Action pane yet, however, and that's because I need to tell Word to load that Action pane. So, I'm going to shut down Word. I'm going to return back to my code over here, and I'm going to go to the document Startup event. That's over here in ThisDocument.vb file. Then I'm going to look at the code. Here is ThisDocument_Startup. Down here, I'm going to say Me dot ship date.
I forgot to type in "Text" here. There is my customerBookmark. I'm going to set its Text equal to some fictitious customer name. Then finally, we're going to come down here and say, Me.ActionsPanes.Controls.Add, and I'm going to add an instance of my new Action pane control, which I called ShipperPane.
So let's review what we did here. When the document starts up, I'm going to populate the two bookmarks with data, and then I'm going to load the ShipperPane in. Save my application. Press F5 to debug the app. The date has been correctly entered, the Acme Dental has been correctly entered, and if I go over here and click on one of these Shippers, you'll notice that it's changing it in the body of the document.
Now of course I can turn off the bookmarks by going to my setting in Word and say, I don't want to see the bookmarkers in my text. We've just skimmed the possibilities of what you can do with Word automation. I'm sure you can think of many reporting scenarios where using Word in this fashion would be helpful.
Get unlimited access to all courses for just $25/month.Become a member