使用C#代码在 PowerPoint 中组合或取消组合形状

在 PowerPoint 中,对形状进行组合和取消组合是两个非常实用的功能。通过组合,您可以将多个形状整合为一个整体,从而像操作单个对象一样同时移动、设置格式、调整大小或旋转这些形状。而取消组合则可以解除这些形状之间的关联,使您能够再次单独编辑每个形状。本文将介绍如何在 C# 和 VB.NET 中实现 PowerPoint 形状的组合与取消组合操作。

安装所需组件

开始之前,需要在 .NET 项目中添加相关 DLL 文件引用。您可以通过下载安装包获取这些 DLL 文件,也可以直接通过 NuGet 进行安装。

cs 复制代码
PM> Install-Package Spire.Presentation

在 C# 和 VB.NET 中组合 PowerPoint 形状

在 PowerPoint 中,可以将多个形状组合为一个整体,以便统一进行移动、缩放、旋转或格式设置。实现这一操作时,可通过幻灯片对象提供的方法对指定形状进行组合。具体步骤如下:

  1. 初始化 Presentation 类的实例。
  2. 通过 Presentation.Slides[0] 获取第一张幻灯片。
  3. 使用 ISlide.Shapes.AppendShape() 方法向幻灯片中添加两个形状。
  4. 初始化 ArrayList 类的实例。
  5. 将两个形状添加到 ArrayList 集合中。
  6. 使用 ISlide.GroupShapes(ArrayList shapeList) 方法对集合中的形状进行组合。
  7. 使用 Presentation.SaveToFile() 方法保存结果文档。

完整示例代码如下:

cs 复制代码
using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Collections;
using System.Drawing;

namespace GroupShapes
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //初始化 Presentation 类实例
            Presentation ppt = new Presentation();

            //获取第一张幻灯片
            ISlide slide = ppt.Slides[0];

            //向幻灯片中添加两个形状
            IShape rectangle = slide.Shapes.AppendShape(
                ShapeType.Rectangle,
                new RectangleF(20, 100, 200, 40));

            rectangle.Fill.FillType = FillFormatType.Solid;
            rectangle.Fill.SolidColor.KnownColor = KnownColors.Gold;
            rectangle.Line.Width = 0.1f;

            IShape ribbon = slide.Shapes.AppendShape(
                ShapeType.Ribbon2,
                new RectangleF(60, 75, 120, 80));

            ribbon.Fill.FillType = FillFormatType.Solid;
            ribbon.Fill.SolidColor.KnownColor = KnownColors.Purple;
            ribbon.Line.Width = 0.1f;

            //初始化 ArrayList 集合
            ArrayList list = new ArrayList();

            //将两个形状添加到集合中
            list.Add(rectangle);
            list.Add(ribbon);

            //组合形状
            slide.GroupShapes(list);

            //保存结果文档
            ppt.SaveToFile("GroupShapes.pptx", FileFormat.Pptx2010);

            //释放资源
            ppt.Dispose();
        }
    }
}

在 C# 和 VB.NET 中取消组合 PowerPoint 形状

若要取消 PowerPoint 文档中已组合的形状,需要遍历文档中的所有幻灯片以及每张幻灯片中的所有形状,找到组合形状后,再使用相应的方法将其取消组合。具体步骤如下:

  1. 初始化 Presentation 类实例。
  2. 使用 Presentation.LoadFromFile() 方法加载 PowerPoint 文档。
  3. 遍历文档中的所有幻灯片。
  4. 遍历每张幻灯片中的所有形状。
  5. 判断当前形状是否为 GroupShape 类型;如果是,则使用 ISlide.Ungroup(GroupShape) 方法取消组合。
  6. 使用 Presentation.SaveToFile() 方法保存结果文档。

完整示例代码如下:

cs 复制代码
using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Collections;
using System.Drawing;

namespace UngroupShapes
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //初始化 Presentation 类实例
            Presentation ppt = new Presentation();

            //加载 PowerPoint 文档
            ppt.LoadFromFile("GroupShapes.pptx");

            //遍历文档中的所有幻灯片
            for (int i = 0; i < ppt.Slides.Count; i++)
            {
                ISlide slide = ppt.Slides[i];

                //遍历每张幻灯片中的所有形状
                for (int j = 0; j < slide.Shapes.Count; j++)
                {
                    IShape shape = slide.Shapes[j];

                    //检测当前形状是否为组合形状
                    if (shape is GroupShape)
                    {
                        GroupShape groupShape = shape as GroupShape;

                        //取消组合形状
                        slide.Ungroup(groupShape);
                    }
                }
            }

            //保存结果文档
            ppt.SaveToFile("UngroupShapes.pptx", FileFormat.Pptx2013);

            //释放资源
            ppt.Dispose();
        }
    }
}

总结

本文介绍了如何在 PowerPoint 中对形状进行组合与取消组合操作。通过组合多个形状,可以像操作单个对象一样统一移动、缩放、旋转和设置格式,从而提升幻灯片编辑效率;而取消组合则能够重新拆分这些形状,便于进一步单独编辑。

文章分别演示了在 C# 和 VB.NET 中实现这两项功能的方法,包括如何创建形状、将多个形状加入集合后进行组合,以及如何遍历幻灯片中的组合对象并将其取消组合。通过这些操作,开发者可以更加灵活地管理 PowerPoint 中的图形元素,提高演示文稿的自动化处理能力。

相关推荐
OpenAnolis小助手1 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
阿尼卡~2 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
hhhjhl3 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指11103 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu1144 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm
slongzhang_4 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
云和数据.ChenGuang5 小时前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节
xyouyuweizhu5 小时前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
多弗朗皮卡丘6 小时前
C++的IO流
开发语言·c++·io流·文件io流
骑着蜗牛撵大象3276 小时前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph