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

一、功能区按钮控制CustomTaskPane的显示隐藏
1.新建一个外接程序,添加可视化功能区和用户自定义控件,在可视化功能区添加两个按钮,一个用来控制自定义任务窗格显示,一个用来控制自定义任务窗格隐藏的。
2.先将自定义任务窗格关联到外接程序,在ThisAddIn.cs文件添加如下代码:

      public CustomTaskPane myCustomTaskPanel = null;//自定义private void ThisAddIn_Startup(object sender, System.EventArgs e){AddTaskPane();//添加自定义Task Pane
        }     /// <summary>/// 添加自定义的Task Pane/// </summary>private void AddTaskPane(){UCTaskPane taskPane = new UCTaskPane();//自定义用户控件名称myCustomTaskPanel = this.CustomTaskPanes.Add(taskPane, "My Task Pane");myCustomTaskPanel.Width = 200;myCustomTaskPanel.Visible = true;}

3.在可视化功能区的两个按钮添加如下代码:

/// <summary>/// 打开自定义任务窗格/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnOpenTask_Click(object sender, RibbonControlEventArgs e){if (Globals.ThisAddIn.myCustomTaskPanel != null){Globals.ThisAddIn.myCustomTaskPanel.Visible = true;}}/// <summary>/// 关闭自定义任务窗格/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnClosePanel_Click(object sender, RibbonControlEventArgs e){if (Globals.ThisAddIn.myCustomTaskPanel != null){Globals.ThisAddIn.myCustomTaskPanel.Visible = false;}}

F5运行,看看效果。也可以在可视化功能区只需添加一个切换按钮(ToggleButton),在按钮点击事件添加一行代码也能很好的控制任务窗格的显示与隐藏:
Globals.ThisAddIn.myCustomTaskPanel.Visible = toggleBtn.Checked;
主要是如何去调用自定义任务窗格:Globals.ThisAddIn.myCustomTaskPanel,然后就是对其进行控制操作(自定义任务窗格可以很好的实现类似WPS的素材库呈现的功能)。

二、自定义任务窗格对幻灯片的相关操作
功能:在自定义任务窗格中,添加一个日期控件,通过其DateChanged事件实现对PPT中对应幻灯片的相关操作,添加文字、添加图片、添加多媒体对象
1.新添加一个用户自定义控件,添加一个日期控件,在其DateChanged事件添加如下代码:

 private PowerPoint.Shape textbox;private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e){if (textbox != null){textbox.Delete();}
            PowerPoint.Slides slides = Globals.ThisAddIn.Application.ActivePresentation.Slides;//获取当前应用程序的所有PPT文档for (int i = 1; i <= slides.Count; i++)//遍历该文档集合,添加文本框
            {PowerPoint.Slide slide = slides[i];textbox = slide.Shapes.AddTextbox(Office.MsoTextOrientation.msoTextOrientationHorizontal, 50, 100, 600, 50);//向当前PPT添加文本框textbox.TextFrame.TextRange.Text = textContent;//设置文本框的内容textbox.TextFrame.TextRange.Font.Size = 48;//设置文本字体大小textbox.TextFrame.TextRange.Font.Color.RGB = Color.DarkViolet.ToArgb();//设置文本颜色
            }}

2.F5运行,点击日期就会在PPT中每一个的幻灯片中将添加一个TextBox对象,位置在(左50,顶100),大小(宽600,高50)。
主要是如何去获取当前演示文稿的所有幻灯片:Globals.ThisAddIn.Application.ActivePresentation.Slides
3.简单封装扩展:添加文字、添加图片、添加多媒体对象、OLE对象

 /// <summary>/// 添加TextBox文本框/// </summary>/// <param name="slide">要添加文本框的幻灯片</param>/// <param name="textContent">文本框显示内容</param>private void AddTextBox(PowerPoint.Slide slide, string textContent){PowerPoint.Shape textbox;textbox = slide.Shapes.AddTextbox(Office.MsoTextOrientation.msoTextOrientationHorizontal, 50, 100, 600, 50);//向当前PPT添加文本框textbox.TextFrame.TextRange.Text = textContent;//设置文本框的内容textbox.TextFrame.TextRange.Font.Size = 48;//设置文本字体大小textbox.TextFrame.TextRange.Font.Color.RGB = Color.DarkViolet.ToArgb();//设置文本颜色
        }/// <summary>/// 添加图片/// </summary>/// <param name="slide"></param>/// <param name="shape"></param>/// <param name="filePath"></param>private void AddADPicture(PowerPoint.Slide slide, PowerPoint.Shape shape, string filePath){PowerPoint.Shape pic;pic = slide.Shapes.AddPicture(filePath, Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);pic.Name = "AD" + shape.Name;//
        }/// <summary>/// 添加音频\视频文件/// </summary>/// <param name="slide"></param>/// <param name="shape"></param>/// <param name="filePath"></param>private void AddMediaObj(PowerPoint.Slide slide, PowerPoint.Shape shape, string filePath){PowerPoint.Shape media;media = slide.Shapes.AddMediaObject(filePath, shape.Left, shape.Top, shape.Width, shape.Height);media.Name = shape.Name;}/// <summary>/// 通过文件路径添加OLE对象/// </summary>/// <param name="slide"></param>/// <param name="shape"></param>/// <param name="className"></param>private void AddClassOLEObj(PowerPoint.Slide slide, PowerPoint.Shape shape,string className){PowerPoint.Shape oleObj;oleObj=slide.Shapes.AddOLEObject(Left:shape.Left,Top:shape.Top,Width:shape.Width,Height:shape.Height,ClassName:className);oleObj.Name = shape.Name;}/// <summary>/// 通过ClassName添加OLE对象/// </summary>/// <param name="slide"></param>/// <param name="shape"></param>/// <param name="fileName"></param>private void AddFileOLEObj(PowerPoint.Slide slide, PowerPoint.Shape shape, string fileName){PowerPoint.Shape oleObj;oleObj = slide.Shapes.AddOLEObject(Left: shape.Left, Top: shape.Top, Width: shape.Width, Height: shape.Height,FileName:fileName);oleObj.Name = shape.Name;}

添加OLE调用:(OLE识别符:http://msdn.microsoft.com/zh-cn/library/ff746158.aspx)

string filePath = "E:\\FF.doc";filePath = "E:\\FF.ppt";filePath = "E:\\FF.xls";filePath = @"C:\Users\Administrator\Videos\广联达PB043926.AVI";filePath = @"C:\Users\Administrator\Videos\广联达轻轻的问候.swf";//AddMedia(slide, filePath);
AddOLEDPath(slide, filePath);string className = "Excel.Sheet";className = "Word.Document";className = "PowerPoint.Slide";// AddOLEDClass(slide, className);

4.对于幻灯片中shapes的遍历处理:(可以根据不同的业务需要对对应的幻灯片 中的一些形状进行处理)

PowerPoint.Slides slides = Application.ActivePresentation.Slides;//获取当前演示文稿所有幻灯片if (!IsHandler(slides))//所有对象是否处理过
            {for (int i = 1; i <= slides.Count; i++){PowerPoint.Slide slide = slides[i];PowerPoint.Shapes shapes = slide.Shapes;int count = shapes.Count;//元素集合总数是变化的for (int j = 1; j <= count; j++){if (shapes[i].Name.Contains("PPT")){shapes[j].Visible = Office.MsoTriState.msoFalse;//将其隐藏
                            string picPath = "c:\\AD.jpg";//
                            AddPicture(slide, shapes[j], picPath);//替换图片
                        }}}}private void AddPicture(PowerPoint.Slide slide, PowerPoint.Shape shape, string filePath){PowerPoint.Shape pic;pic = slide.Shapes.AddPicture(filePath, Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);pic.Name = "AD" + shape.Name;}

三、相关资料参考

MSDN参考资料:
PowerPoint 2013 开发
http://msdn.microsoft.com/zh-cn/library/office/fp161225.aspx

PowerPoint 2013 开发人员参考 (机器翻译)
http://msdn.microsoft.com/zh-cn/library/office/ee861525.aspx

PowerPoint 2013对象模型引用
http://msdn.microsoft.com/zh-cn/library/office/ee861525.aspx

PowerPoint 解决方案
http://msdn.microsoft.com/zh-cn/library/vstudio/bb772069.aspx

相关博客资料:
C# PowerPoint操作的基本用法
http://www.cnblogs.com/hyruur/archive/2011/02/14/1954118.html

VSTO简介及其部署
http://blog.csdn.net/v_jzho/article/category/339472

我的VSTO之路系列
http://www.cnblogs.com/izualx/tag/VSTO/

探索 Word 2007 开发
http://www.cnblogs.com/allenlooplee/category/104575.html

Excel 二次开发系列
http://www.cnblogs.com/tomin/category/209011.html

VSTO项目开发
http://www.cnblogs.com/2018/category/249767.html

VSTO对象操作
http://blog.csdn.net/tianyu0910/article/category/703094

VSTO学习笔记
http://www.cnblogs.com/brooks-dotnet/category/233027.html

转载于:https://www.cnblogs.com/SanMaoSpace/archive/2013/02/19/2917739.html

VSTO Office二次开发对PPT自定义任务窗格测试相关推荐

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

    VSTO Office二次开发PPTRibbonX命令操作及对象添加 本篇分享对于Power Point中一些命令的操作和对于一些比较常用对象.特殊对象的添加功能. 对于Power Point命令操作 ...

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

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

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

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

  4. GeoServer二次开发-OWS服务(自定义模块)

    title: GeoServer二次开发-OWS服务(自定义模块) date: 2021-04-25 author: ac tags: GeoServer categories: GIS 本章介绍Ge ...

  5. 「FastAdmin」fastadmin二次开发中如何自定义查询数据

    fastadmin二次开发中如何自定义查询数据 问题背景:最近做一个网站的过程中遇到了一个需求:对于不同用户组的用户,显示的数据要根据权限来筛选.问题看起来不是很难,文档和社区中已经给了足够的提示,我 ...

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

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

  7. 解决WPS及office二次开发接口无法注册的问题

    问题描述 使用QAxObject的setControl注册接口时返回失败的解决方法 二次开发接口名称 WPS文字 KWPS.Aplication WPS的Excel KET.Application W ...

  8. SolidWorks的二次开发有关的自定义函数

    备注:关于所有的SolidWorks二次开发的问题可以加QQ群(952427329)进行交流. 下面的代码是根据自己SolidWorks的二次开发积累的一些公共函数,因为SolidWorks二次开发的 ...

  9. [转]VSTO Office二次开发应用程序键盘鼠标钩子

    可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...

最新文章

  1. CVPR 2020 | CentripetalNet:目标检测新网络,COCO 48 % AP超现所有Anchor-free网络
  2. 一文带你入门图论和网络分析(附Python代码)
  3. VC模仿超炫QQ界面的实现
  4. TabHost布局及新浪式TabHost布局
  5. 启动SystemServer的进程:启动各种系统服务
  6. The following packages have been kept back
  7. linux系统适合电脑小白吗,linux小白说说用linux的感受
  8. 简单实现一个Websocket服务
  9. php 扩展apc 参数优化
  10. 使用JWT的Cloud Native应用程序
  11. python中解决死锁的方法
  12. 架构师一般做到多少岁_《迷茫中的我们该如何突破瓶颈——成长为一名架构师》...
  13. 信息学奥赛一本通(1330:【例8.3】最少步数)
  14. mybatis No enum const class org.apache.ibatis.type.JdbcType.Date 坑爹的配置
  15. Java-压缩指针compressedOops
  16. 四、对象创建和垃圾回收流程
  17. STM32实战总结:HAL之数码管
  18. 中国电子束抗蚀剂市场深度研究分析报告
  19. Android开发实例-自动生成题库的数独
  20. 详解温度传感器DS18B20编程与使用

热门文章

  1. svn is already locked解决方案
  2. 进击的 JavaScript 之(七) 原型链
  3. Huawei交换机配置两台交换机堆叠示例
  4. Android -- Messenger与Service
  5. Linkedin 工程师如何优化他们的 Java 代码
  6. 使用wamp访问localhost时查看项目地址不对
  7. Exchange工具11—性能监视器
  8. 为了成长,我所做的一些努力!
  9. csu1356 :判断一个环是否为奇数环
  10. 获取新浪网的链接信息