探索 Word 2007 开发(一):我的博客
Written by Allen Lee
创建 Word 2007 插件项目
这里,我将会使用Visual Studio 2008 Beta 2所带的VSTO(Visual Studio Tools for Office)来开发这个插件,此外,Office 2007也是必须的。
Figure 1
如上图所示,你首先需要确保选择了 .NET Framework 3.5的项目,接着选择Visual C#\Office\2007\Word Add-in作为项目模板(当然,你也可以选择Visual Basic下面的那个),然后依次输入解决方案名字和项目名字,最后按下OK完成项目的创建。
Figure 2
我们的项目包含了一个名为ThisAddIn.cs的代码文件,里面的ThisAddIn类就是我们的插件了。现在,我希望为Word 2007创建一个像Research那样的侧边栏,里面将包含与我的博客相关的信息:
Figure 3
创建"我的博客"侧边栏
我不清楚以往怎样才能做到这样,但现在有了VSTO,你可以把以往所学的Windows Forms的技巧都用上,实际上,这样一个侧边栏就是一个用户控件(User Control)。现在,我们就来开发"我的博客"侧边栏。首先,在项目里添加一个名为MyBlogsUserControl的用户控件,接着在它上面拖放下列控件:
MyBlogsUserControl在Visual Studio中的设计如下图所示:
Figure 4
接下来就是把MyBlogsUserControl嵌到Word 2007里了,要做到这样,最简单的办法就是在插件启动的时候,以Custom Task Pane的方式加载控件。回到ThisAddIn.cs,我们可以看到,Visual Studio为我们准备好插件的Startup事件的Event Handler了:
这样,我们只需要在方法里面插入下面的代码:
作为应用程序级别(application-level)的扩展,Office 2007引入了Custom Task Pane这个概念,然而,直接通过Office PIA使用Custom Task Pane比较繁琐,于是,VSTO提供了一个简化方案,正如Code #02所示的那样。
增值服务区
当然,别忘了引用VSTO的命名空间:
考验脑力区
现在来看看运行效果:
Figure 5
到目前为止,"我的博客"侧边栏只是一个"空壳",接下来就是着手实现里面的逻辑了。
填充"我的博客"侧边栏
假设"我的博客"侧边栏的相关文件安置在My Blogs文件夹里,该文件夹的结构如下图所示:
Figure 6
虽然我们可以通过枚举My Blogs的子文件夹来填充cbxBlogs控件,然而我希望设计一个类来表示博客并且实现一定的数据绑定。回顾Figure 4,"我的博客"侧边栏应该具备如下特性:
明确这些需求后,我们就可以着手写代码了:
对于Code #03,以下几点是需要说明的:
我们可以让文件夹的名字和博客的名字相同,但却无法在这里包含博客的URL信息,而这又是很多操作的前提,于是我在My Blogs文件夹里放置一个Blogs.xml文件,里面包含了如下内容:
有了这个文件,我们就可以顺利存取博客的URL信息了。另外,如果你希望让博客的名字不受路径的约束,即可以包含非法的路径字符,那么你可以为blog元素扩展一个directory属性用于存放路径,这样name属性就可以专门用于界面上的显示了。
增值服务区
接下来就是把数据填充到"我的博客"侧边栏了,回到MyBlogsUserControl.cs,在构造函数里添加如下所示的代码:
对于Code #04,以下几点是需要说明的:
噢,别忘记cbxBlogs的SelectedValueChanged事件,下面是该事件的Event Handler:
值得提醒的是,Blog.GetRecentPosts()方法所返回的数组的元素个数和对应博客的设置相关:
Figure 7
现在来看看运行效果:
Figure 8
查看博客、最近帖子和存档草稿
由于查看博客和查看最近帖子这两项操作都是"外包"给Internet Explorer的,我们可以简单地调用System.Diagnostics.Process.Start()方法,并传入选定对象的Url属性的值:
对于存档草稿,我们可以使用Documents.Open()方法来打开,并传递选定存档草稿的Path属性的值:
需要说明的是,对于Documents.Open()方法来说,除了第一个参数,其它参数都是可选的,但由于C#不支持这种可选参数,于是我们只好给它们传递Type.Missing。
至此,"我的博客"侧边栏的开发要告一段落了,虽然我们还想让它变得更强大。作为一个Word 2007扩展插件,现在的"我的博客"侧边栏存在一个不可忽视的问题:它是随Word 2007启动而启动,而不是因用户的需要启动,并且一旦关闭就无法再次启动,除非重新打开Word 2007,这对于用户来说是无法接受的。下一回,我们将探讨扩展Word 2007的Ribbon,并尝试在它上面添加一个按钮来负责"我的博客"侧边栏的启动。