最近做了word2007的插件开发(VBA开发)。虽然还没有完全写完,但是感觉有必要写一些东西了,于是就记录下来....
office的开发分为程序级开发和文档级开发,程序集开发的典型代表就是传说中的插件开发(AddIn)。
具体如何在VS中建立word的插件就是.........
主要是有一个ThisAddIn的类,这个类就代表了这个插件,主要的是两个函数:private void ThisAddIn_Startup(object sender, System.EventArgs e) 和 private void ThisAddIn_Shutdown(object sender, System.EventArgs e)。
从名字上都能猜出这函数是do什么的了.....
下面有两个基本任务:
1,在word程序的上面菜单“Add-Ins”里面增加一个选项,并且增加必要的按钮。这个部分叫做Ribbon开发。具体的详情在网络上有n多,也很简单。主要就是想办法让AddIn启动,我这里在里面增加了一个toggleButton按钮,这个按钮和button区别是这个按钮对选中的状态有显示的不同
namespace ReviewHelperAddIn
{
public partial class ReviewHelperRibbon : OfficeRibbon
{
public ReviewHelperRibbon()
{
InitializeComponent();
}
private void ReviewHelperRibbon_Load(object sender, RibbonUIEventArgs e)
{
}
private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.TaskPane1.Visible = ((RibbonToggleButton)sender).Checked;
}
}
}
这里面的TaskPane1是我AddIn操作的面板,稍后会提到。
Globals.ThisAddIn.TaskPane1.Visible = ((RibbonToggleButton)sender).Checked;这句的作用是当按钮按下的时候,面板TaskPane1就从word程序中显示出来。
2,开发用户控件mainControl。
mainControl是我们使用这个AddIn的时候使用的各种控件的集合类,这个控件是add- UserControl 变来的。当然我们设计控件的话,主要的操作也是要设计这个东东。
好了,于是有人就提醒了,TaskPane1,TaskPane1... 是拉是拉...TaskPane1简单来说就是承载用户控件到AddIn的一个Tools.CustomTaskPane 的类,把TaskPane 和 mainControl结合一起的关键就是:this.taskPane1 = this.CustomTaskPanes.Add(mainControl, "ReviewHelper");
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using Tools = Microsoft.Office.Tools;
namespace ReviewHelperAddIn
{
public partial class ThisAddIn
{
/// <summary>
/// The first one task pane
/// </summary>
private Tools.CustomTaskPane taskPane1;
public Tools.CustomTaskPane TaskPane1
{
get { return taskPane1; }
}
private MainControl mainControl;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.mainControl = new MainControl();
this.taskPane1 = this.CustomTaskPanes.Add(mainControl, "ReviewHelper");
taskPane1.VisibleChanged += new EventHandler(taskPane1_VisibleChanged);
}
private void taskPane1_VisibleChanged(object sender, System.EventArgs e)
{
Globals.Ribbons.ReviewHelperRibbon.toggleButton1.Checked = taskPane1.Visible;
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
另外还要注意这句:Globals.Ribbons.ReviewHelperRibbon.toggleButton1.Checked = taskPane1.Visible;
和前面那个Ribbon开发句子相对应....
好了,这下基本的框架就完成了,build并调试就会启动一个word,并且把插件的安装到这个word里面去了...