先附上官方文档网址:
Office Visual Basic for Applications (VBA) 参考 | Microsoft Learn

前言

我正在学习制作PPT插件,在PPT中,形状是十分重要的元素。以篇文章来分享我对形状的理解。

对象介绍

与形状有关的三个对象如标题所示。
Shape对象:代表绘图层中的对象,例如自选图形、任意多边形、OLE 对象或图片。 也就是Shape对象代表单个形状
ShapeRange对象:代表一组Shape对象。例如当同时选中了多个对象,则这个整体为一个ShapeRange对象。
Shapes对象:指定幻灯片上所有Shape对象的集合

实例分析

生成形状

首先生成形状,可用Shapes对象的AddShape方法生成Shape对象。

//获取页面目前的尺寸
float w = app.ActivePresentation.PageSetup.SlideWidth; //读取页面宽度
float h = app.ActivePresentation.PageSetup.SlideHeight; //读取页面高度//生成图形
PowerPoint.Slide slide = app.ActiveWindow.View.Slide; //实例化页面
PowerPoint.Shape shape1 = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeOval,w/2-20,h/2,Math.Min(w/4,h/4), Math.Min(w / 4, h / 4)); //生成圆形
PowerPoint.Shape shape2 = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, w / 2, h / 2, w / 4, h / 4); //生成矩形
PowerPoint.Shape shape3 = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeIsoscelesTriangle, w / 2, h / 2, w / 4, h / 4); //生成等腰三角形

上面代码生成了圆形、矩形、等腰三角形三个对象。

利用结合形状来阐述三者关系

如果我们要结合圆形与矩形,如下图所示:

则我们需要得到仅包含圆形和矩形的ShapeRange对象
方案一:先使用鼠标选中两个图形,再使用Selection对象的ShapeRange属性得到ShapeRange对象。

PowerPoint.ShapeRange shapeRange = app.ActiveWindow.Selection.ShapeRange;
//当前窗口中选中的形状

这就离谱,你说我都上鼠标了,我干嘛不直接点击上图中的【结合】?还要你PPT插件何用?所以方案一不可取。
方案二:利用Shapes对象的Range方法,择选圆形和矩形。这也是本文的重点,利用Shapes来获取ShapeRange。

利用Shapes来获取ShapeRange

shape1.Name = "圆"; //给圆形命名
shape2.Name = "方"; //给矩形命名
string[] name = {"圆", "方"}; //将所要选择的形状名字构成字符串数组
PowerPoint.ShapeRange shapeRange = slide.Shapes.Range(name); //在页面所有形状中,选择圆形和矩形构成ShapeRange

最后一步结合形状

//结合形状
shapeRange.MergeShapes(Office.MsoMergeCmd.msoMergeUnion);

总结

1.Shapes对象可以直接获取。
2.用Shapes对象的AddShape方法生成Shape对象。
3.用Shapes对象的Range方法获取ShapeRange对象。
4.你学会了合并形状的方法。

VSTO Shapes对象、ShapeRange对象和Shape对象的关系相关推荐

  1. 枚举如何设置空白_2019-07-04 用VBA设置word中shape对象相对位置

    在excelhome上看到一个提问 Excel 请教:用代码插入文本框,不随文字移动.-ExcelVBA程序开发-ExcelHome技术论坛 -​club.excelhome.net 本以为可以通过录 ...

  2. Shape对象和轮廓填充ShapeGeometry

    Shape对象和轮廓填充ShapeGeometry 本文是Three.js电子书的7.7节 轮廓生成 轮廓填充ShapeGeometry shape 基类-子类 算法:根据轮廓的顶点使用三角面Face ...

  3. TensorFlow中的对象检测教程:实时对象检测

    导言 创建能够在单个图像中识别和定位多个对象的精确机器学习模型仍然是计算机视觉中的核心挑战.但随着最近深度学习的进步,对象检测应用程序比以往更容易开发.TensorFlow的对象检测API是一个构建与 ...

  4. 有原型的对象和没有原型的对象

    在学习Mobx时接触到了有原型对象和没原型的对象概念 声明一个对象 1 let o = Object.create({}) // 方法一 2 let o = {} // 方法二3 let o = Ob ...

  5. python哪些是可变对象_python的不可变对象与可变对象及其妙用与坑

    先上图. 图里,分别用三个整数进行了验证.可以发现当a和b值相同时,a与b地址也一致.改变a的值,a的地址也跟着改变了. 原因 python的宗旨之一,万物皆对象.(单身狗狂喜) 而对象又被分为可变对 ...

  6. 对象存储HTML自定义属性,设置对象属性_对象存储服务 OBS_SDK参考_Node.js_上传对象_华为云...

    开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助.接口参考文档详细介绍了每个接口的参数和使用方法. 您可以在上传对象时设置对象属性.对象属性包含对象长 ...

  7. java 对象转json json转对象

    java 对象转json json转对象 import com.alibaba.fastjson.JSON;/*** * @title: fastjson * @author: wll* @since ...

  8. js 对象转json,json转对象

    简介: JSON.stringify   对象转json:查看对象中存储的数据 JSON.parse       json转对象:value=object.key 注:只有对象才可以通过 " ...

  9. java类与对象作用_Java类与对象

    ●类和对象的关系: 一:类是对同一类事物(对象)的抽象,对象实际存在的该类的各种实体. 二:面向对编程的核心:找合适的对象来做合适的事. 三:Java中找到对象: 1):sun自己定义好的类,必须知道 ...

最新文章

  1. 为什么我参加了那么多学术会议依旧一无所获?
  2. node 进阶 | 通过node中如何捕获异常阐述express的特点
  3. 职业经理人应该如何处理如下问题
  4. 学习ribbon,进来看看吧
  5. 从神经网络到全栈AI开发,原来AI还能这么用
  6. jenkins 项目启动日志_jenkins 修改启动文件即jdk路径、log路径和切换jenkins用户
  7. 收集SQLite中的时间日期函数[ZT]
  8. 蓝桥杯2020山西省省赛太原理工大获丰收
  9. 贝叶斯统计(Bayesian statistics) vs 频率统计(Frequentist statistics):marginal likelihood(边缘似然)
  10. shellcode执行盒_简单shellcode学习
  11. mysql 什么是审核上线_自动审核及上线系统
  12. 僵尸网络 Botnet
  13. 老Java程序员花一天时间写了个飞机大战,很舒服!
  14. 网络诊断,浏览器不能上网,其他软件都能上网
  15. ES快速入门(七) ElasticSearch7.X分布式部署
  16. Ubuntu应用---官方完美安装typora (.md文件编辑器)
  17. python英文版怎么改成中文版_Python中文(非英文字符)解决方法
  18. 黄褐斑的食疗用什么,姬净美效果不错
  19. ADS8328 驱动代码
  20. 我说CMMI2.0之组织级培训(OT)

热门文章

  1. 环形链表【手绘漫画】面试必考之双指针(LeetCode 141)
  2. Sanic框架登录验证——Sanic-Auth的使用方法
  3. Java编辑器IDEA的下载与安装
  4. 为发烧而生:个人电脑诞生记
  5. 内网BT首选:BitComet使用技巧点滴
  6. 自动驾驶|苹果证实已收购自动驾驶初创公司Drive.ai 价格尚未披露
  7. 死囚试毒酒问题(改编)
  8. 移动互联的“大熊猫”——优秀前端工程师
  9. CSS进阶(7)- 样式补充
  10. [GKCTF2020]CheckIN详解