Powerpoint 插件制作日记-1
来源:互联网 发布:群ping软件 编辑:程序博客网 时间:2024/06/10 11:23
因为一个外包项目的需要,尝试了在powerpoint上开发插件,算是一种学习精神,准备让插件支持powerpoint 2003,2007,2010 三个版本
其实如果仅仅只做插件的话还是挺容易,但考虑到2007和2010使用的Ribbon UI以及2003的普通菜单式UI,所以决定做一个同时适应两种UI的插件。
最终实现的效果如下:
Powerpoint 2003 (在工具菜单里面加入 菜单项,点击菜单项后 显示工具栏)
Powerpoint 2010(在Ribbon tab上添加新的tab, PPA, 然后在此tab里面添加新的按钮)
实现过程如下:
打开vs2010新建项目->其他项目类型->扩展性->共享的外界程序 然后点击确定
vs 将打开 共享外接程序向导界面,在向导中依次下一步,然后根据提示选择以及填写相关信息,在这里,我们选择为Misrosoft Powerpoint(主机)创建项目。
完成后双击打开默认生成的Connect.cs文件
此类默认继了 Object, Extensibility.IDTExtensibility2两个对象,现在我们为其添加IRibbonExtensibility接口,并且实现接口
接下来在此类的OnConnection方法中处理普通界面的显示(这里主要针对2003版)
var menubar = applicationObject.CommandBars["Menu Bar"]; var toolsItem = menubar.Controls["工具(&T)"] as CommandBarPopup; if (toolsItem != null) { myButton1 = toolsItem.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton; myButton1.Caption = "打开窗口"; myButton1.Visible = true; myButton1.Click += new _CommandBarButtonEvents_ClickEventHandler(myButton_Click); myButton2 = toolsItem.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton; myButton2.Caption = "关闭窗口"; myButton2.Visible = false; myButton2.Click += new _CommandBarButtonEvents_ClickEventHandler(myButton_Click); }
以上代码的主要作用是在工具菜单中添加两个子项:关闭窗口,打开窗口,并且两个按钮的事件都绑定到myButton_Click上
void myButton_Click(CommandBarButton Ctrl, ref bool CancelDefault){ try {if (toolbar == null){ try { toolbar = applicationObject.CommandBars["My_Toolbar"]; } catch { } if (toolbar == null) { toolbar = applicationObject.CommandBars.Add("My_Toolbar", 1, missing, true); var save = (CommandBarButton)toolbar.Controls.Add(1, missing, missing, missing, missing); save.Caption = "Save"; save.Style = Microsoft.Office.Core.MsoButtonStyle.msoButtonIcon; save.Click += new _CommandBarButtonEvents_ClickEventHandler(save_Click); save.Picture = PictureHost.GettIPictureDispFromPicture(RES.android);//PictureHost是继承自AxHost的一个类,主要作用是将Image对象转换为IPictureDisp对象 } } if (toolbar.Visible) { //toolbar.Delete(); toolbar.Visible = false; myButton1.Visible = true; myButton2.Visible = false; } else { toolbar.Visible = true; myButton1.Visible = false; myButton2.Visible = true; } } catch (Exception e) {MessageBox.Show(e.Message + "\n" + e.StackTrace); }}
以上方法主要处理在点击按钮的时候对工具栏的操作(此处其实应该可以仅采用一个按钮,但是不知为何我在测试的过程中发现,采用一个按钮以上代码不能多次执行,也就是说只能在第一次点击的时候有效,之后点击则无效,望高手解答)
通过以上的操作,我们的插件已经能实现在powerpoint 03上显示菜单和工具栏了,接下来我们来完善对07,2010的支持
在实现IRibbonExtensibility接口的GetCustomUI方法中添加代码,此方法是返回定义Ribbon UI的xml字符串,在这里,我将xml放到了资源文件中,因此,方法内容很简单
public string GetCustomUI(string RibbonID){ return RES.Ribbon2;}
Ribbon2的xml格式如下:
<?xml version="1.0" encoding="UTF-8"?><customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> <ribbon> <tabs> <tab label="PPA" id="PPA"> <group id="PPAGroup" label="PPA Group"> <button label="btnA" showImage="true" id="btnA" onAction="button1_Click" /> <button label="btnB" showImage="true" id="btnB" onAction="button2_Click" /> </group> </tab> </tabs> </ribbon></customUI>
其作用是添加新的名叫PPA的tab,并且在此tab中定义一个叫PPAGroup的group,此group中添加两个按钮btnA和btnB,分别关联事件button1_Click,button2_Click
button1_Click button2_Click的定义可以直接放到继承自IRibbonExtensibility接口的类中,方法定义如下:
public void button1_Click(IRibbonControl control){ System.Windows.Forms.MessageBox.Show("hello");}
这样,在powerpoint执行的时候就会自动解析xml,并且在触发点击事件的时候执行绑定的方法
后续:对于Ribbon UI xml的生成其实可以借助vs项目模板中的Office系列,这个项目模板是基于VSTO的,其实本来基于VSTO很容易开发office07,10的插件(截图中的MyXmltab就是采用vsto的方法开发,此法需要在ThisAddIn.cs文件中添加一个如下的重写来实现Robbin UI的加载
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject(){ return new Ribbon2();}
)但无奈其不支持03,所以我们只能创建普通的外接程序了。
闲话:在做这些之前其实没有任何头绪,期间也google了很多资料,包括msdn的资料也查阅了,但直到完成后发现其实挺简单的,感叹微软的工具真的很强大啊!
相关代码下载
推荐一个博客,上面有很多vsto开发的文章:http://blog.csdn.net/v_jzho
- Powerpoint 插件制作日记-1
- PowerPoint制作技巧四则
- powerpoint制作下拉菜单
- PowerPoint制作技巧四则
- PowerPoint动画制作练习
- PowerPoint课件制作技巧
- 怎样制作答辩用PowerPoint
- PowerPoint 幻灯片 PPT 进度条 制作
- PowerPoint制作遮罩特效
- PowerPoint课件制作技巧集锦
- powerpoint(ppt) 的制作
- PowerPoint插件出问题的解决方法
- 制作演示文稿的PowerPoint 技巧
- PowerPoint如何制作光滑立体球
- 用Python制作Powerpoint演示文稿
- 教你如何制作PowerPoint拼图效果
- PowerPoint
- QtCreator插件开发之学习日记1
- C++中获得CPU高精度时间戳( 纳秒级 )
- WebService从零到项目开发使用1—技术研究之基础篇 SOAP
- CVPR 2013 Read List
- ANT简明教程
- Qt隐藏功能和技巧
- Powerpoint 插件制作日记-1
- extjs--grid
- Android private IP leak
- 有关对象指针的使用
- static的理解
- java性能优化设计之--异步处理
- unix网络编程第一卷学习之套接字地址结构
- javascript:Function笔记1
- 水仙花数算法