使用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 中的图形元素,提高演示文稿的自动化处理能力。

相关推荐
Scout-leaf1 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6251 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
Artech2 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
LDR0062 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术2 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园2 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob2 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享2 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.2 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..2 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang