• 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:pptsales.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。)

  • 相关阅读:
    数据库迁移至ASM
    获取数据库或SHEME的DDL语句
    membership配置数据库(SQL2000)
    DIV+CSS到底是什么?
    如何更改表的所有者权限
    windows server 2003 上“您要访问的网页有问题,无法显示。HTTP 500 内部服务器错误。”的问题解决方案!
    瞎忙
    瞎忙
    如何更改表的所有者权限
    DIV+CSS到底是什么?
  • 原文地址:https://www.cnblogs.com/cplemom/p/11290688.html
Copyright © 2020-2023  润新知