主要记录add-in开发过程中的磕磕碰碰。
开发工具VS2008 office2007。
1.F5调试时报“签名时出错: 指定了无效的提供程序类型”。
解决:电脑“开始菜单-office文件夹-office工具-VBA数字证书-创建”。
右键开发项目,比如WordAddIn1 属性-签名-从存储区选择。选择刚创建的证书,确定保存,就能正常F5了。
2.F5调试后word残留add-in调试功能区移除。
VS工作台-生成-清理解决方案。就可以移除调试的add-in插件了。
插件注册表路径 HKEY_CURRENT_USERSoftwareMicrosoftOfficeWordAddins 展开,找到自己的那个项目文件夹节点,直接删除也可以移除调试的插件。
3.创建自定义功能区菜单栏选项
右键开发项目,新建项-V C#项-Office-功能区(可视化设计器)-Ribbon1.cs。双击打开,然后在工作台左侧工具箱-office 功能区控件 各种拖拉进来,然后各种双击click事件里写代码就行了。跟winform开发一样。
4.创建自定义文档内winform窗体控件,包括各种按钮、输入框啥的控件。
右键开发项目,添加-用户控件 UserControl1.然后就各种布局,按钮双击事件、局部变理,全局变理啥的,跟正常的winform开发一样。
双击打开 ThisAddIn.cs进入开发模式
private UserControl1 myUserControl1;//定义局部变量用户自定义控件
public Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane;//定义全局变量,用来放自定义控件的容器,可以视为form一样的容器,可能需要在功能区按钮来实现该form的隐藏显示,所以需要用public.
然后在自带的startup方法里,实现自定义控件和容器,包括名字,大小,浮动位置。添加到程序的容器集合里,随时调用。
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
myUserControl1 = new UserControl1();
myCustomTaskPane = CustomTaskPanes.Add(myUserControl1, "Login Form");
myCustomTaskPane.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionFloating;
myCustomTaskPane.Width = 340;
myCustomTaskPane.Height = 320;
myCustomTaskPane.DockPositionRestrict = Microsoft.Office.Core.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
}
然后在功能区事件类Ribbon1.cs里的某个按钮事件或是别的啥事件里显示这个form就可以了。
private void button1_Click(object sender, RibbonControlEventArgs e)
{
//加载C盘下的文件列表并呈现在word内
string path = "C:\";
DirectoryInfo info = new DirectoryInfo(path);
string str="";
foreach (FileInfo file in info.GetFiles())
str += file.Name + "
";
Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
object start = 0, end = 0;
Microsoft.Office.Interop.Word.Range range = doc.Range(ref start, ref end);
range.InsertBefore(str);
Globals.ThisAddIn.myCustomTaskPane.Visible = true;//显示form
}