VSTO Office二次开发PPTRibbonX命令操作及对象添加

本篇分享对于Power Point中一些命令的操作和对于一些比较常用对象、特殊对象的添加功能。

对于Power Point命令操作:
有了前一篇《[转]VSTO Office二次开发RibbonX代码结构》的了解,就可以尝试现实自己的RibbonX的相关元素的操作了,这里提供简单的小示例:
1.创建外接程序。
创建一个PPT的外接程序,在《VSTO Office二次开发对PowerPoint功能简单测试》随笔中有介绍,如何创建一个简单的PPT外接程序。
2.创建功能区(XML)。
在项目右键单击添加,弹出“添加新项”,添加“功能区(XML)”,以XML的形式创建功能区。
在Ribbon1.xml添加如下代码,定义三个回调事件"MyCopy"\"MyCut"\"GetInfo":

<?xml version="1.0" encoding="UTF-8"?>
<customUIxmlns="http://schemas.microsoft.com/office/2006/01/customui"onLoad="Ribbon_Load"><commands><!--PPT中的文件保存功能不能使用--><commandidMso="FileSave"enabled="false"/><!--"MyCut"扩展PPT中"剪切"命令的响应事件--><commandidMso="Cut"enabled="true"onAction="MyCut"/><commandidMso="Copy"enabled="true"onAction="MyCopy"/></commands><ribbon><tabs><tabidMso="TabAddIns"><groupid="MyGroup"label="My Group"><buttonid="MyButton"label="MyButton"onAction="GetInfo"/></group></tab></tabs></ribbon>
</customUI>

3.回调函数编写。
在Ribbon1.cs文件中添加对于回调函数的处理代码:

/// <summary>///MyButton的回调方法/// </summary>/// <param name="control"></param>public voidGetInfo(Office.IRibbonControl control){MessageBox.Show("Released");}/// <summary>///MyCopy的回调方法/// </summary>/// <param name="control">触发控件</param>/// <param name="cancelDefault">是否取消功能</param>public void MyCopy(Office.IRibbonControl control, ref boolcancelDefault){bool isSuccess =IsSuccess();//如果cancelDefault返回false,则取消该操作cancelDefault =isSuccess;}/// <summary>///要处理的业务/// </summary>/// <returns></returns>private boolIsSuccess(){return false;}

4.关联外接程序。
前几步把Ribbon设计完毕,现在与Power Point外接程序进行关联:(重写RequestService方法)

private Ribbon1 ribbon;//重新定义Ribbon1/// <summary>///重写RequestService方法/// </summary>/// <param name="serviceGuid"></param>/// <returns></returns>protected override objectRequestService(Guid serviceGuid){if (serviceGuid == typeof(Office.IRibbonExtensibility).GUID){if (ribbon == null)ribbon= newRibbon1();returnribbon;}return base.RequestService(serviceGuid);}

5.功能测试。
F5运行程序,简单测试。对于“文件保存”、“剪切”、“复制”操作的测试。

对于操作的RibbonX的Office 2010所有命令(Office2010ControlIDs.exe也有对于2007支持的命令):
参见:http://social.msdn.microsoft.com/Forums/pl/worddev/thread/337946b2-edc4-4f40-bb45-1babf58a5e7e
下载:http://www.microsoft.com/download/en/details.aspx?id=6627

对于RibbonX进行对Office程序的XML编程很不错。几个可参考资源
使用 Open XML 文件格式自定义 Office Fluent 功能区
利用您自己的功能区选项卡和控件扩展 2007 Office System
细品RibbonX(12):使用XML Notepad自定义功能区
http://www.360doc.com/content/09/1110/11/406571_8725398.shtml

对于PowerPoint添加对象:
微软也提供了一些调用接口:
《Shapes.AddPicture 方法 》http://msdn.microsoft.com/zh-cn/library/office/jj735114.aspx
《OLE 程序标识符 (PowerPoint)》http://msdn.microsoft.com/zh-cn/library/office/ff746158.aspx
常用对象添加调用代码:

        /// <summary>///添加常用对象///通过OLE添加对象,支持网络文件访问///添加公式:Equation.3///添加图表:MSGraph.Chart/// </summary>/// <param name="slide">幻灯片</param>/// <param name="filePath">文件路径</param>/// <param name="left">居左位置</param>/// <param name="top">居右位置</param>/// <param name="width">宽度</param>/// <param name="height">高度</param>#region 添加对象操作     //添加图片private void AddADPicture(PowerPoint.Slide slide, string filePath, float left, float top, float width, floatheight){PowerPoint.Shape pic;pic=slide.Shapes.AddPicture(filePath, Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue,left,top,width,height);pic.Name= "Picture";pic.Tags.Add("Name", "Value");//或用tag标签携带数据
}//添加媒体文件private void AddMedia(PowerPoint.Slide slide, string filePath, float left, float top, float width, floatheight){PowerPoint.Shape media;media=slide.Shapes.AddMediaObject(filePath,left,top,width,height);media.Name= "Media";}//添加任意对象,但需要激活操作private void AddOLEDPath(PowerPoint.Slide slide, string filePath, float left, float top, float width, floatheight){PowerPoint.Shape oledFile;oledFile= slide.Shapes.AddOLEObject(left,top,height,width,FileName: filePath, DisplayAsIcon: Office.MsoTriState.msoTrue);//, DisplayAsIcon: Office.MsoTriState.msoTrueoledFile.Name =filePath;            }//添加Flash播放器,需要本机上安装Flash播放插件private void AddFlashObj(PowerPoint.Slide slide, string fileName, float left, float top, float width, floatheight){object oleControl = slide.Shapes.AddOLEObject(left, top, width, height, "ShockwaveFlash.ShockwaveFlash", "",Office.MsoTriState.msoFalse,"", 0, "", Office.MsoTriState.msoFalse).OLEFormat.Object;Type oleControlType= oleControl.GetType();              /*设置flash播放属性*/oleControlType.InvokeMember("EmbedMovie", BindingFlags.SetProperty, null, oleControl, new object[] { true});oleControlType.InvokeMember("Playing", BindingFlags.SetProperty, null, oleControl, new object[] { true});oleControlType.InvokeMember("Movie", BindingFlags.SetProperty, null, oleControl, new object[] { fileName });//设置Flash文件路径oleControlType.InvokeMember("Scale", BindingFlags.SetProperty, null, oleControl, new object[] { "ExactFit" });//设置显示比例为:严格匹配oleControlType.InvokeMember("ScaleMode", BindingFlags.SetProperty, null, oleControl, new object[] { 2});}//添加3D模型播放器,需要本机上安装BS Contact插件private void AddBSContactObj(PowerPoint.Slide slide, string fileName, float left, float top, float width, floatheight){object oleControl = slide.Shapes.AddOLEObject(left, top, width, height, "BSContact.BSContact", "",Office.MsoTriState.msoFalse,"", 0, "", Office.MsoTriState.msoFalse).OLEFormat.Object;Type oleControlType= oleControl.GetType();              /*设置BSContact播放属性*/oleControlType.InvokeMember("Enabled", BindingFlags.SetProperty, null, oleControl, new object[] { true});oleControlType.InvokeMember("url", BindingFlags.SetProperty, null, oleControl, new object[] { fileName });//设置BSContact文件路径oleControlType.InvokeMember("walkSpeed", BindingFlags.SetProperty, null, oleControl, new object[] { 0});oleControlType.InvokeMember("animateAllViewpoints", BindingFlags.SetProperty, null, oleControl, new object[] { false});}//添加图片,以OLE对象形式private void AddOlePicture(PowerPoint.Slide slide, string fileName, float left, float top, float width, floatheight){object oleControl = slide.Shapes.AddOLEObject(left, top, width, height, "Forms.Image.1", "",Office.MsoTriState.msoFalse,"", 0, "", Office.MsoTriState.msoFalse).OLEFormat.Object;Type oleControlType=oleControl.GetType();oleControlType.InvokeMember("Enabled", BindingFlags.SetProperty, null, oleControl, new object[] { true});Bitmap bitmap= newBitmap(fileName);stdole.StdPicture pic=(stdole.StdPicture)ImageConverter2.ImageToIpicture(bitmap);oleControlType.InvokeMember("Picture", BindingFlags.SetProperty, null, oleControl, new object[] { pic });}//添加Windows Media Player播放器,本机安装Windows Media Player(插件)private void AddOleMedia(PowerPoint.Slide slide, string fileName, float left, float top, float width, floatheight){//MediaPlayer.MediaPlayer.1或WMPlayer.OCX.7object oleControl = slide.Shapes.AddOLEObject(left, top, width, height, "WMPlayer.OCX.7", "",Office.MsoTriState.msoFalse,"", 0, "", Office.MsoTriState.msoFalse).OLEFormat.Object;Type oleControlType=oleControl.GetType();oleControlType.InvokeMember("Enabled", BindingFlags.SetProperty, null, oleControl, new object[] { true});oleControlType.InvokeMember("Url", BindingFlags.SetProperty, null, oleControl, new object[] {fileName });}//添加Form窗体,窗体中添加Image控件,单击弹出"PPT"信息提示//命名引用:using MF = Microsoft.Vbe.Interop.Forms;private void AddOleForm(PowerPoint.Slide slide, string fileName, float left, float top, float width, floatheight){var oleControl = slide.Shapes.AddOLEObject(left, top, width, height, "Forms.Frame.1", "",Office.MsoTriState.msoFalse,"", 0, "", Office.MsoTriState.msoFalse);var obj =oleControl.OLEFormat.Object;oleControl.Name= "Frame";PowerPoint.OLEFormat oleF= slide.Shapes.Range("Frame").OLEFormat;MF.Frame frm1=(MF.Frame)oleF.Object;frm1.Caption= "PP";MF.Image image= (MF.Image)frm1.Controls.Add("Forms.Image.1");image.Click+= newMF.ImageEvents_ClickEventHandler(image_Click);Bitmap bitmap= newBitmap(fileName);image.Picture=(stdole.StdPicture)ImageConverter2.ImageToIpicture(bitmap);}voidimage_Click(){MessageBox.Show("PPT");}#endregion

其中,图片转化类,将StdPicture转换为Bitmap:

 public classImageConverter2 : System.Windows.Forms.AxHost{publicImageConverter2():base("59EE46BA-677D-4d20-BF10-8D8067CB8B33"){}public staticstdole.IPictureDisp ImageToIpicture(System.Drawing.Image image){return(stdole.IPictureDisp)ImageConverter2.GetIPictureDispFromPicture(image);}public staticSystem.Drawing.Image IPictureToImage(stdole.StdPicture picture){returnImageConverter2.GetPictureFromIPicture(picture);}}

也可以添加Word\Excel\PPT《VSTO Office二次开发对PPT自定义任务窗格测试》,发现通过添加OLE对象使用ClassName标识的形式,可以添加本机安装的很多Com组件,在PPT中插入的ActiveX组件基本都可以通过OLE对象通过程序添加到PPT中。

本文转自SanMaoSpace博客园博客,原文链接:http://www.cnblogs.com/SanMaoSpace/archive/2013/03/01/2939498.html,如需转载请自行联系原作者

VSTO Office二次开发PPTRibbonX命令操作及对象添加相关推荐

  1. VSTO Office二次开发对PPT自定义任务窗格测试

    上篇文章对VSTO Office二次开发操作PPT功能做了简单测试,主要是如何创建一个外接程序并在新建PPT幻灯片时添加自定义文本信息.如何简单自定义任务窗格.如何添加可视化功能区的简单介绍,应该对于 ...

  2. VSTO Office二次开发键盘鼠标钩子使用整理

    VSTO Office二次开发键盘鼠标钩子使用整理 可能通过程序控制键盘的操作和控制鼠标的一些操作,网上提供比较多的也是比较好的就是通过钩子(Hook)的方式实现. 简单整理了一下,没有找到很好的程序 ...

  3. [转]VSTO Office二次开发RibbonX代码结构

    前段时间,碰到对于PPT中控制一些命令的问题,也是很是查找了不少的资料,最后使用的是RibbonX的形式解决的,发现RibbonX也是如此的高效. 文章来自:<细品RibbonX(9):层次分明 ...

  4. 新酷卡 mysql接口_新酷卡M池二次开发模块数据库操作版

    有大神发了一个soket方式的,尝试继承到模块后发现soket不太适合放到易模块类内, 客户组件不支持放在类内,必须放在界面上,传入赋值类内客户变量,收到数据事件也没办法放在类内,放弃 远程服务支持库 ...

  5. 基于C#的AutoCAD二次开发之块操作

    基于C#的AutoCAD二次开发之块操作 什么是块? 块由多个在逻辑上相关的图形对象所定义的整体. 块的优点有哪些 统一作业标准.提高作业效率 压缩图形文件 便于修改和维护 块的分类 块的分类 简单块 ...

  6. C#进行MapX二次开发之图层操作

    特别说明,本文整理自一篇网络的文章<MapX从数据库读取数据形成新图层(C#)> 在C#中实现MapX从数据库读取数据形成新图层分为两个问题: 1. MapX从数据库读取数据形成新图层: ...

  7. c# cad 二次开发 类库 对话框 将frame界面添加到类库中

    c# cad 二次开发 类库 对话框 将frame界面添加到类库中 using System; using System.Collections.Generic; using System.Compo ...

  8. et操作 python wps_拿起来就用的office二次开发(python,win32com使用经历总结)

    通过使用office的开发接口,让我深深的领悟到了office的强大(应该wps也有二次开发的接口).每每看到工作中比较繁琐的office操作,总是想做个vba快捷键或者做个文档处理程序,从繁重的文本 ...

  9. Revit二次开发 外部命令和外部应用

    外部命令 通过IExternalCommand来添加自己的应用.Revit通过.addin文件来识别和加载外部插件 基本原理 Revit没有其他命令在运行或者没有处于编辑模式,那么已经注册了的外部命令 ...

最新文章

  1. 使用locate 的正则查询 查找所有main.c
  2. 菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
  3. JavaScript中的作用域,闭包和上下文
  4. OSPF特殊区域之STUB
  5. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
  6. springboot jwt token前后端分离_为什么要 前后端分离 ?
  7. 福州PHP讲师招聘_“艺”起就业|招聘信息汇总
  8. 在IT行业对专业知识的掌握能力
  9. 为什么有的电路中要有两单片机
  10. 光彩集团小宇智能机器人_“智能急救教学机器人”走进文惠小学集团总部文韬校区...
  11. hibernate查询出的实体,set值后,自动更新到数据库
  12. 实现 Spherical Harmonic Lighting
  13. macbook 安装iperf_三分钟学会iperf3的使用
  14. 软件著作权算法软件设计说明书_软件著作权设计说明书范本.doc
  15. 图像的频谱图简单理解
  16. 苹果屏蔽更新描述文件_iOS 屏蔽系统更新描述文件更新!快把烦人的系统更新提示关掉...
  17. 图像形成(2) 基本的辐射图像形成模型(扩展内容,可不阅读)
  18. 三角函数公式合集——从诱导公式到求导公式
  19. OpenJudge NOI 2.1 1752:鸡兔同笼
  20. CA Server证书申请与颁发 Apache2 HTTPS

热门文章

  1. Azure正式对外发布容器服务,支持Swarm和Mesos
  2. 128条形码计算,利用Code 128字体实现条码打印
  3. 2013年6月编程语言排行榜,C语言位据第一位
  4. delphi usb 读写_写作论语 | 崔嵘:写我所读——国外整本书阅读中读写结合的理论与实践(上)...
  5. ios 设计模式 MVC ,MVVM
  6. ARP监控工具ARPalert常用命令集合大学霸IT达人
  7. 分享Kali Linux 2016.2第45周VMware虚拟机
  8. Xamarin iOS教程之编辑界面编写代码
  9. oracle中or的替函数,Oracle常用内置Or自定义函数-SQL宝典
  10. 如何让图像过渡更自然 python_如何过渡至 Python 3