使用.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 開發”工作負載。

Office/SharePoint 開發

3. 創建 VSTO 項目

首選我們需要在 Visual Studio 中創建一個 VSTO 項目,選擇“新建項目”,然后選擇“PowerPoint VSTO 外接程序”,如下圖所示:

創建 VSTO 項目

然后點擊“下一步”,輸入項目名稱,點擊“創建”按鈕,即可創建一個 VSTO 項目。

3.1 添加按鈕

在創建的 VSTO 項目中,我們需要添加一個按鈕,用于觸發導出圖片的操作。在“解決方案資源管理器”中,右鍵添加一個新項,選擇“功能區 (可視化設計器)”項,如下圖所示:

添加功能區

添加完成后,雙擊添加的項目,在設計器中,我們可以添加按鈕,用于觸發導出圖片的操作。在設計器中,找到“工具箱”選項卡,然后找到“按鈕”控件,拖動到功能區中,如下圖所示:

添加按鈕

需要注意的是,為了讓這個新添加的功能區顯示在開始的選項卡中,我們需要修改 RibbonTab 的屬性,將 ControlId 設置為“TabHome”。

修改 RibbonTab 屬性

關于按鈕的屬性設置,我們可以設置按鈕的標簽、圖標等,這里我設置了按鈕的標簽為“導出”。對于圖標,我們可以使用內置的圖標,也可以使用自定義的圖標。這里我使用了內置的圖標 ImageMSO。只需要將 OfficeImageId 屬性設置為自己想要的圖標 ID 即可。

設置按鈕屬性

對于 ImageMSO 圖標 ID,可以在 Office 圖標庫 中查找。

3.2 添加事件

在添加按鈕后,我們需要為按鈕添加事件,用于觸發導出圖片的操作。在設計器中,雙擊按鈕,即可為按鈕添加點擊事件。在事件中,我們可以編寫導出圖片的邏輯。

文件保存可以使用 SaveFileDialog 控件,一樣使用拖動的方式添加到設計器中。然后在代碼中,我們可以使用 SaveFileDialog 控件來選擇保存路徑。

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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717319.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue 3 中的 watchEffect 和 watch 有什么區別?

Vue 3 中的 watchEffect 和 watch 有什么區別? Vue 3 引入了 Composition API,為開發者提供了更加靈活和組織化的方式來組合和復用代碼邏輯。在響應式系統中,watch 和 watchEffect 是兩個重要的函數,用于觀察和響應 Vue 組件中狀…

JUC并發編程 深入學習Java并發編程【上】

JUC并發編程,深入學習Java并發編程,與視頻每一P對應,全系列6w字。 P1-5 為什么學特色預備知識 進程線程概念 進程: 一個程序被運行,從磁盤加載這個程序的代碼到內存,就開起了一個進程。 進程可以視為程…

JVM相關問題

JVM相關問題 一、Java繼承時父子類的初始化順序是怎樣的?二、JVM類加載的雙親委派模型?三、JDK為什么要設計雙親委派模型,有什么好處?四、可以打破JVM雙親委派模型嗎?如何打破JVM雙親委派模型?五、什么是內…

Spring Cloud Gateway-系統保護Sentinel集成

文章目錄 Sentinel介紹Spring Cloud Gateway集成Sentinelpom依賴Sentinel配置Sentinel集成Nacos作為數據源自定義降級響應 Sentinel介紹 ? 隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式、多語言異構化服務架構的流量治理組件&a…

HTML5:七天學會基礎動畫網頁6

CSS3自定義字體 ①:首先需要下載所需字體 ②:把下載字體文件放入 font文件夾里,建議font文件夾與 css 和 image文件夾平級 ③:引入字體,可直接在html文件里用font-face引入字體,分別是字體名字和路徑 例…

Django官網項目

項目準備 使用VSCODE做IDE。 檢查Python版本。 sudo apt install sudo apt update python3 --version創建項目路徑,創建虛擬環境,創建項目 路徑 \mysite 進入路徑,運行VSCODE 運行 "code ." 創建虛擬環境。 選擇 >python: c…

【推薦算法系列十七】:GBDT+LR 排序算法

排序算法經典中的經典 參考 推薦系統之GBDTLR 極客時間 手把手帶你搭建推薦系統 課程 邏輯回歸(LR)模型 邏輯回歸(LR,Logistic Regression)是一種傳統機器學習分類模型,也是一種比較重要的非線性回歸模型&#xff…

AAAI2024-分享若干篇有代碼的優秀論文-圖神經網絡、時間序列預測、知識圖譜、大模型等

圖神經網絡、大模型優化方向系列文章目錄 為了方便大家根據自己的興趣查看自己的研究方向論文,在這里進行了細分。如果有對其中的論文感興趣的,可以查看對應的文章在論文相應的代碼,方便快速上手學習,也可以借助這些代碼的學習快…

16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(遞歸、思維、dp)

C. Min Max Sort 很不錯的一道題目,不過腦電波和出題人每對上, q w q 。 qwq。 qwq。 正難則反。 我們考慮最后一步是怎么操作的。 最后一步一定是對 1 1 1和 n n n進行操作 那么上一步呢? 上一步應該是對 2 2 2和 n ? 1 n-1 n?1 以此類推…

AMD“高級洞察”系列揭示Epyc Naples和Rome原型CPU早期無法啟動問題

AMD在其新的YouTube視頻系列《高級洞察》第一集中,由AMD首席技術官Mark Papermaster擔任主持人,討論了AMD在數據中心領域的突破性進展及其持續增長。然而,AMD在服務器業務的發展并非一帆風順,兩位高管公開討論了早期Epyc Naples和…

【Python】環境管理怎么選擇【virtualenv】【pipenv】【 poetry】【 conda】

前言 剛入門Python,看到PyCharm的環境管理選擇有好幾個選擇,分別是virtualenv、pipenv、venv、conda,只知道這些都可以用來管理Python環境的,但不知道這些環境有什么區別,所以,本文將對這些環境管理進行總…

Avalonia學習(二十九)-儀表

Avalonia制作儀表盤&#xff0c;把控件給大家演示一下&#xff0c;Avalonia有三類自定義控件&#xff0c;分別是用戶控件、模版控件、自主控件。前面已經很多用戶控件了&#xff0c;這個是演示模版控件&#xff0c;另外一種不知道哪種情況下使用。 前端代碼&#xff1a; <…

想從事數據方向職場小白看過來, 數據方面的一些英文解釋

想從事數據方向職場小白看過來&#xff0c;一些英文名詞解釋 文章目錄 想從事數據方向職場小白看過來&#xff0c;一些英文名詞解釋 英文類解釋NoSQL&#xff1a;ESB&#xff1a;ACID &#xff1a;Data Vault&#xff1a;MDM&#xff1a;OLAP&#xff1a;SCD:SBA&#xff1a;MP…

【Django】執行查詢——比較、刪除、復制、批量修改對象

以下述模型為基礎&#xff0c;討論檢索對象的方式方法&#xff1a; from datetime import datefrom django.db import modelsclass Blog(models.Model):name models.CharField(max_length100)tagline models.TextField()def __str__(self):return self.nameclass Author(mod…

【vue】v-if、v-show、v-for 相關所有面試題總結

v-if 和 v-show 的區別 兩個重點【dom】和【生命周期】 v-if 惰性指令&#xff0c;false 不會被編譯、渲染不會存在 DOM 中切換開銷大&#xff0c;需要重新創建元素值變化&#xff0c;使用 v-if 的組件生命周期執行順序 true 變為 false【組件的銷毀】 beforeDestroy / befor…

[Flutter]shared_preferences基本用法以及可視化管理存儲的key和value類型

shared_preferences 是一個Flutter插件&#xff0c;它提供了一種簡單的方式來在應用程序中存儲和獲取持久化的鍵值對數據。它可以用于存儲應用程序的配置信息、用戶偏好設置、登錄狀態等。 使用 shared_preferences 插件&#xff0c;你可以在應用程序中輕松地保存和讀取數據&a…

Java中線程相關的知識

創建子線程的三種方式: 1.自定義線程任務類繼承線程類&#xff0c;以便繼承其功能,重寫其run方法(里面寫自己需要實現的功能)&#xff0c;在main方法調用時創建其任務類實例化對象&#xff0c;然后調用對象的start方法(繼承自父類)&#xff0c;即成功創建線程 優點:創建方式簡…

Pandas DataFrame 基本操作實例100個

Pandas 是一個基于NumPy的數據分析模塊&#xff0c;最初由AQR Capital Management于2008年4月開發&#xff0c;并于2009年底開源。Pandas的名稱來源于“Panel Data”&#xff08;面板數據&#xff09;和“Python數據分析”&#xff08;data analysis&#xff09;。這個庫現在由…

來不及了!大學必須完成的四件事!

老師們常說&#xff0c;上大學就輕松了 其實不然 大學不是人生的終點&#xff0c;而是新的起跑線 不是休息站&#xff0c;而是進入社會的最后沖刺跑道 大學生活苦樂參半&#xff0c;成人世界即將來臨 出了校門&#xff0c;你會發現社會復雜多變&#xff0c;需要不斷學習 稍…

excel中如何使用VLOOKUP和EXACT函數實現區分大小寫匹配數據

在 Excel 中&#xff0c;VLOOKUP 函數默認情況下是不區分大小寫的&#xff1a; 比如下面的案例&#xff0c;直接使用VLOOKUP函數搜索&#xff0c;只會搜索匹配到不區分大小寫的第一個 如果我們想要實現區分大小寫的精確匹配&#xff0c;可以使用 EXACT 函數結合 VLOOKUP 函數 …