欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

VSTO之PowerPoint(PPT)插件开发常用API汇总

程序员文章站 2022-06-04 11:46:09
VSTO简介 VSTO(Visual Studio Tools for Office )是VBA的替代,使得开发Office应用程序更加简单,并且用VSTO来开发office应用程序可以使用Visual studio开发环境中的众多功能和CLR提供的内存管理,垃圾回收等功能 额。。。这个是百度的介绍 ......

vsto简介

vsto(visual studio tools for office )是vba的替代,使得开发office应用程序更加简单,并且用vsto来开发office应用程序可以使用visual studio开发环境中的众多功能和clr提供的内存管理,垃圾回收等功能

额。。。这个是百度的介绍,手动滑稽!说白了就是用来开发office插件的。

office插件开发解决方案选择

最近由于工作原因,一直在看开发自定义的office插件的解决方案,总共有如下几种

  • vba --- visual basic的一种宏语言,基本放弃考虑
  • vsto --- vb的替代品,目前主流office插件的实现方式
  • office add-ins --- 使用主流的web技术(html, css, and javascript)来操作office文档

这里说下我最后选择了用vsto来实现需求。首先vba肯定被排除了,表示不会vb。然后office add-ins由于自身的特性不太符合需求所以也放弃了,介绍下office add-ins是啥个玩意。

使用visual studio 2017创建一个office add-ins项目,系统自动会创建一个包含两个项目的解决方案。()




项目 描述
加载项目 仅包含xml清单文件,其中包含描述加载项的所有设置。这些设置可帮助office主机确定何时应激活加载项以及加载项应显示的位置。
web应用程序项目 包含加载项的内容页面,包括开发支持office的html和javascript页面所需的所有文件和文件引用。在开发加载项时,visual studio会在本地iis服务器上托管web应用程序。当准备发布加载项时,需要将此web应用程序项目部署到web服务器。

这也就意味着用户的插件界面都是通过http请求到服务器上获取的,如果有一些功能(例如统一字体,导出图片等)是需要离线状态也可以运行,那这个解决方案就没法满足了。所以最后我选择了vsto

vsto开发ppt插件之api简介

最开始我只是想开一篇文章记录下开发过程中常用的那些api(真的不好找啊!),最后啰里啰嗦的扯了很多背景介绍,终于轮到我本来想记录的东西了,希望后来踩坑的同学能够开发的顺畅些。

常用的获取操作对象的api

//获取当前ppt中所有的幻灯片
globals.thisaddin.application.activepresentation.slides;
//获取当前选中的ppt幻灯片
var activeslide = (slide)globals.thisaddin.application.activewindow.view.slide;
//获取当前选中幻灯片的index,默认从1开始
activeslide.slideindex
//在当前选中幻灯片前插入新的幻灯片--代码提示中没有f12进去才找到的方法
slides.add(activeslide.slideindex, ppslidelayout.pplayoutcustom);
//获取当前窗体中的选定对象
globals.thisaddin.application.activewindow.selection;

复制粘贴操作幻灯片

//选择复制的silde(可以为数组new int[2]{3,5}})
globals.thisaddin.application.activepresentation.slides.range(1).copy();
//在指定位置粘贴slide
globals.thisaddin.application.activepresentation.slides.paste(1);

//复制别的文档中的slide
//在1位置插入指定路径ppt的index 2-5的幻灯片
globals.thisaddin.application.activepresentation.slides.insertfromfile("c:\ppt\sales.ppt", 1, 2, 5);

修改主题字体(统一字体功能)

//获取主题
var master = globals.thisaddin.application.activepresentation.slidemaster;

//修改中文字体
//“标题”中的中文字体
master.theme.themefontscheme.majorfont.item(microsoft.office.core.msofontlanguageindex.msothemeeastasian).name = "新宋体";
//“内容”中的中文字体
master.theme.themefontscheme.minorfont.item(microsoft.office.core.msofontlanguageindex.msothemeeastasian).name = "新宋体";

//修改英文字体
//“标题”中的英文字体
master.theme.themefontscheme.majorfont.item(microsoft.office.core.msofontlanguageindex.msothemelatin).name = "新宋体";
//“内容”中的英文字体
master.theme.themefontscheme.minorfont.item(microsoft.office.core.msofontlanguageindex.msothemelatin).name = "新宋体";

插入图片

//在当前选中幻灯片左上角插入图片,位置和大小可以调整
//activeslide看我上面的获取方式
//picurl可以是网络地址或本机物理地址
activeslide.shapes.addpicture(picurl, microsoft.office.core.msotristate.msotrue, microsoft.office.core.msotristate.msotrue, 0, 0);

//选中一个文本框或图片框,插入背景图片
//获取第一个选中的“形状”
var shape = globals.thisaddin.application.activewindow.selection.shaperange[0];
sharp.fill.userpicture(picurl);

未完待续!(其实我也还在摸索当中,之后会整理一个commonhelper方法,封装一下常用的获取对象api。)