使用.NET开发VSTO工具快速将PPT导出为图片

本文主要介绍如何使用.NET开发 PowerPoint VSTO 外接程序,并实现快速的将当前页PPT导出为图片的功能。可以帮助你了解如何使用 VSTO 开发 Office 外接程序,以及如何操作 PowerPoint 的对象模型。

1. 背景

在日常的文章写作中,我经常使用 PPT 来制作一些文章的封面配图,然后导出为 PNG 图片使用。

如果手动操作,则需要选择"文件",然后选择"导出" ,转到 "更改文件类型",选择图片文件类型,最后点击"另存为"。操作到这里,还没有结束,还需要选择导出的路径,接下来还会弹出询问是保存所有幻灯片还是仅当前的。这样的操作过程无比繁琐,还非常耗时。

因此,使用 .NET 开发一个 VSTO 工具,实现快速的将当前页 PPT 导出为图片的功能,可以大大提高效率,也愉悦我的写作心情。

2. 开发环境

  • Visual Studio 2022
  • .NET Framework 4.8
  • Microsoft Office 2013 及以上版本

这里的开发环境是基于 Visual Studio 2022,如果你的开发环境不同,可能会有一些差异,但是基本的思路是一样的,需要注意的是,要在工作负载中勾选"Office/SharePoint 开发"工作负载。

3. 创建 VSTO 项目

首选我们需要在 Visual Studio 中创建一个 VSTO 项目,选择"新建项目",然后选择"PowerPoint VSTO 外接程序",如下图所示:

然后点击"下一步",输入项目名称,点击"创建"按钮,即可创建一个 VSTO 项目。

3.1 添加按钮

在创建的 VSTO 项目中,我们需要添加一个按钮,用于触发导出图片的操作。在"解决方案资源管理器"中,右键添加一个新项,选择"功能区 (可视化设计器)"项,如下图所示:

添加完成后,双击添加的项目,在设计器中,我们可以添加按钮,用于触发导出图片的操作。在设计器中,找到"工具箱"选项卡,然后找到"按钮"控件,拖动到功能区中,如下图所示:

需要注意的是,为了让这个新添加的功能区显示在开始的选项卡中,我们需要修改 RibbonTab 的属性,将 ControlId 设置为"TabHome"。

关于按钮的属性设置,我们可以设置按钮的标签、图标等,这里我设置了按钮的标签为"导出"。对于图标,我们可以使用内置的图标,也可以使用自定义的图标。这里我使用了内置的图标 ImageMSO。只需要将 OfficeImageId 属性设置为自己想要的图标 ID 即可。

对于 ImageMSO 图标 ID,可以在 Office 图标库 中查找。

3.2 添加事件

在添加按钮后,我们需要为按钮添加事件,用于触发导出图片的操作。在设计器中,双击按钮,即可为按钮添加点击事件。在事件中,我们可以编写导出图片的逻辑。

文件保存可以使用 SaveFileDialog 控件,一样使用拖动的方式添加到设计器中。然后在代码中,我们可以使用 SaveFileDialog 控件来选择保存路径。

csharp 复制代码
private void exportBtn_Click(object sender, RibbonControlEventArgs e)
{

    var pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();
    var activeWindow = pptApplication.ActiveWindow;
    var slide = activeWindow.View.Slide;
    saveFileDialog.ShowDialog();
    if (saveFileDialog.FileName != "")
    {
        slide.Export(saveFileDialog.FileName, "PNG");
    }

}

3.3 调试和运行

在编写完成后,我们可以点击"启动"按钮,即可运行 VSTO 项目。运行后,我们可以在 PowerPoint 中看到添加的功能区。

点击按钮,即可触发导出图片的操作。

4. 最后

通过这篇文章,我们学习了如何使用 .NET 开发 PowerPoint VSTO 外接程序,并实现快速的将当前页 PPT 导出为图片的功能。本项目的相关代码已经上传到 GitHub,欢迎大家下载学习:https://github.com/sangyuxiaowu/SlideSnapshot?WT.mc_id=DT-MVP-5005195

相关推荐
Y3815326624 小时前
C# 调用谷歌搜索 API:HttpClient 与 System.Text.Json 实战
搜索引擎·.net
qq_4101942914 小时前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
唐青枫2 天前
别急着拆服务:C#.NET 微服务架构从边界设计到实战
c#·.net
唐青枫3 天前
别把 Razor 当成几段 HTML:C#.NET Razor Pages、MVC 视图与实战详解
c#·.net
宝桥南山3 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
Lost of 程序猿4 天前
.NET 10 船端单机部署与离线升级实战:从闪退事故到无感回滚
c#·asp.net·.net
慧都小妮子4 天前
Word/Excel/PPT 如何稳定导出 Markdown?文档 SDK 三线能力拆解
.net·markdown·知识库·aspose·rag·文档转换·文档互操作
AcaDesign4 天前
上海市科技奖申报答辩ppt制作案例_科技进步奖ppt模板_技术发明奖ppt设计_自然科学奖ppt美化
大数据·科技·powerpoint
唐青枫4 天前
对象到底住在哪里?C#.NET 托管堆从分配、GC 到内存排查
c#·.net
古少侠4 天前
deepseek转word工具怎么选?DS随心转与4种方案对比实测
人工智能·word·powerpoint