逐步教學:撰寫 PowerPoint 2010 的 Add-in


官方網站已經有提供相關的教學文件了,例如這篇:逐步解說:建立 PowerPoint 的第一個應用程式層級增益集。這裡就當作是個補充範例,示範如何寫一個 PowerPoint add-in 來將目前的投影片轉成 jpg 圖片。

下列步驟會建立一個 PowerPoint 2010 的增益集(.dll),它會在 PowerPoint 主選單的「增益集」選單底下增加一個選單項目,像這樣:


1. 建立專案

開啟 Visual Studio 2010,點主選單的 File > New > Project,然後:


2. 建立選單與對應的事件處理程式碼

在 Solution Explorer 中展開專案底下的 PowerPoint 項目,雙擊此項目底下的 ThisAddIn.cs。然後在此類別中加入以下程式碼(要先 using System.Windows.Forms 命名空間):

    private Office.CommandBar menuBar;
    private Office.CommandBarPopup newMenuBar;
    private Office.CommandBarButton cvtToImgBtn;
 
    private void AddMenuBar()
    {
        try
        {
            menuBar = this.Application.CommandBars["Menu Bar"];
            newMenuBar = (Office.CommandBarPopup)menuBar.Controls.Add(
                Office.MsoControlType.msoControlPopup, missing,
                missing, missing, true);
             if (newMenuBar != null)
             {
                newMenuBar.Caption = "我的增益集";
                cvtToImgBtn= (Office.CommandBarButton)newMenuBar.Controls.
                Add(Office.MsoControlType.msoControlButton, missing,
                    missing, 1, true);
                cvtToImgBtn.Style = Office.MsoButtonStyle.
                    msoButtonIconAndCaption;
                cvtToImgBtn.Caption = "另存成圖片";
                cvtToImgBtn.FaceId = 65;
                cvtToImgBtn.Tag = "ppt2img";
                cvtToImgBtn.Click += new
                    Office._CommandBarButtonEvents_ClickEventHandler(
                    cvtToImgBtn_Click);
                    newMenuBar.Visible = true;
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
    }
 
    private void cvtToImgBtn_Click(Office.CommandBarButton ctrl,
        ref bool cancel)
    {
        if (this.Application.ActivePresentation == null || 
            String.IsNullOrEmpty(this.Application.ActivePresentation.FullName))
        {
            MessageBox.Show("請先開啟文件。""訊息"MessageBoxButtons.OK);
            return;
        }
 
        string filename = this.Application.ActivePresentation.FullName;
 
        for (int i = 0; i < Application.ActivePresentation.Slides.Count; i++)
        {
            string outFileName = @"C:\" + Path.GetFileName(filename) + 
                String.Format(".{0:00}.jpg", i+1);
            // 第一張投影片的索引值是 1,不是 0。
            Application.ActivePresentation.Slides[i+1].Export(outFileName, "jpg", 0, 0);
        }
    }


然後找到此類別的 ThisAddIn_Startup 事件處理常式,在裡面呼叫剛才寫好的 AddMenuBar 方法:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        AddMenuBar();
    }


3. 測試

Build 專案。建置完成後,若沒有錯誤,隨便開啟一個 PowerPoint 文件,應該就可以看到主選單的「增益集」裡面多出我們自訂的增益集項目:


點擊「另存成圖片」,就會將目前的投影片檔案中的每一張投影片個別存成 .jpg 的圖檔。存放的位置是 C:\。

一點筆記

寫程式控制 Microsoft Office 並不難,就跟使用其他現成元件一樣,只要找到正確的「入口」,了解其物件模型與關鍵的屬性、事件,剩下的就容易多了。問題就是這個元件還挺大的,有時只為了一個小問題,卻得參考好多文件,東試西試,才能找到那個解問題的關鍵屬性。

以前在使用 Office OLE Automation 時,最常用的伎倆就是先利用 Office 應用程式的錄製巨集功能,把想要的操作錄下來變成指令碼,再從中學習和改寫。

可是,PowerPoint 2010 卻沒有錄製巨集的功能...Orz

你可以從 PowerPoint 選項中找到「開發人員」的選項,並將它開啟(預設是關閉的),如下圖:


這樣雖然可以令主選單出現「開發人員」項目,可是它並不像 Word 那樣有錄製巨集的功能。


無法故技重施,似乎就只好多花點時間 K 官方文件,或者到網路上爬文了。

最後一點要記的是,如果要將自己寫的增益集打包成安裝程式,要記得在 Setup 專案中設定欲登錄的 registry key。請參考官方文件:應用程式層級增益集的登錄項目,然後對照底下兩張圖,應該就挺清楚了。


這最後一張圖所顯示的,就是在 Visual Studio 中製作 Setup 專案時的 Registry Editor 畫面。

延伸閱讀

Post Comments

技術提供:Blogger.