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项⽬,系统⾃动会创建⼀个包含两个项⽬的解决⽅案。()项⽬加载项⽬Web应⽤程序项⽬
描述
仅包含XML清单⽂件,其中包含描述加载项的所有设置。这些设置可帮助Office主机确定何时应激活加载项以及加载项应显⽰的
位置。包含加载项的内容页⾯,包括开发⽀持Office的HTML和JavaScript页⾯所需的所有⽂件和⽂件引⽤。在开发加载项时,VisualStudio会在本地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\
修改主题字体(统⼀字体功能)
//获取主题
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。)
因篇幅问题不能全部显示,请点此查看更多更全内容