相信大家或多或少,

都曾经觉得做PPT有些过程太繁琐,

如果自己需要的设计能够一键生成那该多爽。


本期就以下面这个封面生成器为案例,

从0到1分享一下PPT插件的制作过程。


我觉得一个PPT插件它的目标一定是:

通过简单的操作,

帮助PPT完成复杂或者繁琐的任务。


PPT插件类型


从类型上看PPT插件分为三种:


第一种是VBA插件,

它是直接在PPT里点出开发工具,

使用VB语言编写的,

我以前做的配色生成器,

就属于这种类型。


第二种是联网插件,

官方名字叫Office Add-in。

它基本不涉及在本地设备中运行的代码,

功能都放在网络上,

PPT只放一张皮。


在插入的【获取加载项】中能找到这类插件,

比如以前介绍过的pexels插件就属于这类,

它能够直接在PPT里搜图。


第三种是COM插件,

它是遵循一定规范编写的程序,

可以在本地设备中运行,

以便给PPT提供额外的功能,

这也是本期视频介绍的插件类型。


PPT插件技术翻译


让我们再来回顾一下目标:

插件是希望通过简单的操作

帮助PPT完成复杂或者繁琐的任务。


这里介绍一些工具,

可以帮助我们实现这个目标。


首先Visual Studio是一个集成开发环境,

它能帮助我们简便地编辑代码,

建立界面设计和代码的联系。


里面的VSTO工具,

Visual Studio Tools for Office,

专门用来帮助制作Office插件,

当然也包括PPT插件。


最后,

复杂或者繁琐的任务怎么来做,

你需要讲给软件听,

并且能让它听懂,

它能听懂的语言是VB或者C#。


说到这里,

从技术的角度让我们把目标翻译一下:

在集成开发环境Visual Studio中,

借助VSTO工具包,

使用C#语言,

指挥PPT完成某些任务。


HEIP插件设计


先说VS(Visual Studio)的安装,

要记住要勾选Office/SharePoint开发工具集,

这就我们刚才说的VSTO。


安装完成后就可以创建项目了,

在【搜索模板】中直接输入VSTO,

找到PowerPoint VSTO外接程序并创建。


这些是软件自动生成的代码。


接下来设计一下界面,

在解决方案上右键添加【新建项】,

选择【可视化设计器】,

出来了一个叫Ribbon的东西,

这其实就是PPT里的一个菜单。


左侧工具箱中拖入一个Button。


把名字改一下,

再把ControlSize从Regular切换为Large。


并在Image属性中点击右侧的三个小点,

导入本地图片作为按钮图标。


这就完成了一个简单的界面设计。


如果这个时候我们点击启动,

VS会自动打开PPT,

PPT菜单中会出现我们刚刚做的界面。


回到VS点击停止调试,

PPT会自动关闭。


目前这个界面只是一张皮,

我们需要几行代码让它和打开的PPT产生联系。


双击Ribbon进入代码界面,

顶上的using语句,

代表程序需要用到哪些命名空间,

因为我们需要操作PPT,

所以这里得添加一句:

using Microsoft.Office.Interop.PowerPoint;


再加一句:

using Microsoft.Office.Core;


我们可以用简短的单词,

比如PowerPoint替代长串的Microsoft.Office.Interop.PowerPoint。


然后在 Ribbon1类的第1行,

声明一个PPT应用程序PowerPoint.Application变量命名为app。


在Ribbon1的Load事件中添加语句:

app = Globals.ThisAddIn.Application

让插件一打开就获取目前PPT的控制权。


通过这么几行代码,

真正了建立插件和PPT的联系。


接下来就可以给PPT安排任务了:

回到Ribbon的设计界面双击按钮,

进入它的单击事件。


告诉它:

一点击就先获取一下页面目前的尺寸

然后让选中的图片铺满屏幕。

再插入一个全屏矩形,

随机生成一个比较暗的填充色。

把它填充为半透明。

再插入一个文本框,

写上白色大号文字,

让它处于页面中心。


以上任务都不涉及什么算法,

关键就是找到C#指挥PPT的语句,

因为PowerPoint是一个成熟的功能极多的应用程序,

所以指挥它的过程中必然会用到很多长名字的属性和方法。


我把代码贴在这里,

感兴趣的可以看看。

using Microsoft.Office.Tools.Ribbon; using System; using System.Collections.Generic; using System.Linq; using System.Text; using PowerPoint = Microsoft.Office.Interop.PowerPoint; using Office = Microsoft.Office.Core; namespace HEIP { public partial class Ribbon1 { PowerPoint.Application app; private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { app = Globals.ThisAddIn.Application; } private void button1_Click(object sender, RibbonControlEventArgs e) { float w = app.ActivePresentation.PageSetup.SlideWidth; float h = app.ActivePresentation.PageSetup.SlideHeight; PowerPoint.Slide slide = app.ActiveWindow.View.Slide; PowerPoint.Selection sel = app.ActiveWindow.Selection; PowerPoint.ShapeRange range = sel.ShapeRange; range[1].LockAspectRatio = Office.MsoTriState.msoFalse; range[1].Width = w; range[1].Height = h; range[1].Left = 0; range[1].Top = 0; PowerPoint.Shape shape = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, 0, 0, w, h); Random rd = new Random(); int r = rd.Next(0, 30); int g = rd.Next(10, 50); int b = rd.Next(20, 70); shape.Fill.ForeColor.RGB = r+g*256+b*256*256; shape.Fill.Transparency = 0.4F; shape.Line.Visible = Office.MsoTriState.msoFalse; PowerPoint.Shape txb = slide.Shapes.AddTextbox(Office.MsoTextOrientation.msoTextOrientationHorizontal, w / 4, h / 3, w / 2, h / 3); txb.TextFrame.TextRange.Text = "LAOHEI"; txb.TextFrame2.TextRange.Font.Size = 96; txb.TextFrame2.TextRange.Font.NameFarEast = "微软雅黑"; txb.TextFrame2.TextRange.Font.Name = "微软雅黑"; txb.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = 16777215; txb.TextFrame.TextRange.ParagraphFormat.Alignment = PowerPoint.PpParagraphAlignment.ppAlignCenter; txb.TextFrame.VerticalAnchor = Office.MsoVerticalAnchor.msoAnchorMiddle; } } }


我将编好的程序封装好了,

换一台电脑打开PPT,

菜单栏目前是初始状态。


安装插件之后重启PPT,

这里出现了HEIP可直接使用。


安装文件已打包,

关注头条号【黑白间设计】,私信【HEIP】即可获取。

注意是:黑(HEI)~~P,不是HELP噢。