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。)

VSTO之PowerPoint(PPT)插件开发常用API汇总的更多相关文章

  1. java selenium常用API汇总

    (WebElement.iFrame.select.alert.浏览器窗口.事件.js)     一 WebElement相关方法 1.点击操作 WebElement button = driver. ...

  2. TensorFlow常用API汇总

    1.tensorflow的基本运作为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始: import tensorflow as tf #定义‘符号’变量,也称为占位符 a = tf.p ...

  3. js常用API汇总(转)

    typeof(); 检测数据类型 String(); 转换成字符串 parseInt(); 解析出一个string或number的整数部分 parseFloat(); 解析出一个string的浮点数部 ...

  4. java poi reader常用API汇总

    注意:(1)判断行的最大数量建议使用sheet.getLastRowNum();(2)判断每行最大列数建议使用row.getLastCellNum(); [JAVA]特别注意,POI中getLastR ...

  5. Java反射常用API汇总

    “JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...

  6. 常用API接口汇总

    下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送.音乐.云.语义识别 ...

  7. Java | 个人总结的Java常用API手册汇总

    目录 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Throwable Thre ...

  8. 常用API接口

    引用  常用API接口汇总

  9. 【转】Spring Boot干货系列:常用属性汇总

    转自Spring Boot干货系列:常用属性汇总 附录A.常用应用程序属性 摘自:http://docs.spring.io/spring-boot/docs/current/reference/ht ...

随机推荐

  1. 汇编入门三-CPU工作原理

    本文为读书笔记,个人总结与摘抄自<汇编语言 第二版> 1.CPU从内存中读取数据,首先要获得存储单元的地址. 2.指明进行的操作,如存储或者读写 所以,CPU要进行操作总结为: 1.存储单 ...

  2. memcached--add使用

    memcached是一种管理内存的软件,来动态的分配机器的内存,将需要存储的数据以key-value(键值对)的形式存储在内存中. 1.memcached使用的存储算法是hash算法在内存中存储字符串 ...

  3. javascript——原型与原型链

    一.prototype 在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象. 例如: function Person(age) { this.age = ag ...

  4. SQL Server温故系列(3):SQL 子查询 & 公用表表达式 CTE

    1.子查询 Subqueries 1.1.单行子查询 1.2.多行子查询 1.3.相关子查询 1.4.嵌套子查询 1.5.子查询小结及性能问题 2.公用表表达式 CTE 2.1.普通公用表表达式 2. ...

  5. Codeforces Gym101505G:Orchard Division(扫描线+线段树第k大)

    题目链接 题意 给出一个m*m的地图,上面有n个点,现在需要用一个自定义面积的矩形笼罩住恰好n/2个点,并且这个矩形需要有一个点在至少一个角落上,问这个矩形最小的面积是多少. 思路 有点类似于扫描线. ...

  6. Linux命令学习-ps命令

    Linux中,ps命令的全称是process status,即进程状态的意思,主要作用是列出系统中当前正在运行的进程信息. ps命令的功能很强大,参数也非常多,下面只举几个简单的实例. 显示所有进程信 ...

  7. mysql 免安装版本 与问题记录

    将文件解压到D盘, 创建 my.ini 配置文件, ------------------复制进去--------------------- [client] port=3306 default-cha ...

  8. 9.22考试 crf的视察 题解

    这道题当时第一反应就是一道典型的NOIP第一题的难度,绝对要A掉,不然分数一定会被拉开. 然后就开始分析,暴力是一开始想的是用二维树状数组打加上暴力枚举长度,然而这道题满足二分性质,所以时间复杂度就是 ...

  9. Connecting to the Network

    This lesson shows you how to implement a simple application that connects to the network. It explain ...

  10. 【CYH-01】小奔的国庆练习赛:赛后标程

    前排鸣谢@找寻 大佬 emm-由于头一次举办公开赛所以--准备不是很充分,所以说题解也没有备好,在这里表示歉意. 欢迎大家来发布题解,在此我们可以提供AC代码,供大家参考. T1 解析:这一题可能栈溢 ...