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

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

原文地址:https://www.cnblogs.com/cplemom/p/11290688.html

时间: 2024-10-09 14:20:48

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

js常用API汇总(转)

typeof(); 检测数据类型 String(); 转换成字符串 parseInt(); 解析出一个string或number的整数部分 parseFloat(); 解析出一个string的浮点数部分 Number(); 把一个string解析为number Blooean(); 转换成布尔类型""(NaN,undefined,null,0返回false) isNaN(); 判断是否为NaN isFinite(); 指明所提供的数字是否是有限的(NaN .负无穷或正无穷返回false

Java反射常用API汇总

"JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性" 一.类对象的获取 1.通过对象获取 Object obj = new Object(); obj.getClass(); 2.通过类名获取 Object.class; 3.通过类的路径名获取 Class.forName("com.metadata.Student"); 二.类的实例化和构造函数 获取到的class对象可以直接通过cla

Java常用英语汇总(面试必备)

Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口,使用权) algorithm                     n.算法 ['.lg.riem] annotation                     [java]代码注释 [.n.u'tei..n] anonymous                

C++ 中超类化和子类化常用API

在windows平台上,使用C++实现子类化和超类化常用的API并不多,由于这些API函数的详解和使用方法,网上一大把.本文仅作为笔记,简单的记录一下. 子类化:SetWindowLong,GetWindowLong,CallWindowProc,FindWindowEx 超类化:GetClassInfoEx,RegisterClassEx,UnRegisterClass 以上函数在代码中的使用见<C++ 中超类化和子类化> VC中基于SDK编程的窗口子类化 VC中基于SDK编程的窗口子类化的

Linux 常用命令汇总

Linux 常用命令汇总 1. 显示日期与时间:date 可修改显示日期格式,如:date +%Y/%m/%d %H:%M à2016/12/25 17:05(%Y:年:%m:月:%d:日:%H:24小时制:%M:分) date –d 参数后可加:today/yesterday/tomorrow 来显示今天.昨天.明天日期 2. 显示日历:cal(默认显示本月月历) cal 2001 可显示2001年整年日历:cal 10 2001 可具体显示某月月历 3.  计算器:bc 4. Tab键:用在

List容器——ArrayList及常用API

List: ①   List容器是有序的collection(也称为序列).此接口的用户可以对List容器中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素.List容器允许插入重复的值,包括null; ②   最常见的两个List接口的实现类是ArrayList和LinkedList; ArrayList及常用API: ①   ArrayList—动态数组; ②   ArrayList类扩展了AbstractList并实现了List接口

hadoop常用api编写

package hsfs常用api; import java.io.ByteArrayInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;

hadoop java接口及常用api

# java接口及常用api package com.yting.hadoop.hdfs; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputS

Mysql常用基本命令汇总及默认账户权限与修改

一直只是在浅显利用数据库存储数据,也被windows惯坏了,很多命令使用的时候记不起来,so,换LINUX系统!不再使用GUI管理数据库!也想深入学习下Mysql,从权限管理开始!也就诞生了这篇学习笔记. 修改默认密码 Mysql新安装时默认root密码为空,极不安全!建议安装过后马上就修改.附修改方法: mysqladmin -u root -p password 接下来按提示输入新密码即可! 命令详解: mysqladmin -u root -p[oldpass] password newp