C#操作PowerPoint的基本代碼

b5cw 9年前發布 | 2K 次閱讀 C#

C#操作PowerPoint的基本代碼,包括打開ppt文件、讀取幻燈頁,插入幻燈片,自動播放等

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OFFICECORE = Microsoft.Office.Core;
using POWERPOINT = Microsoft.Office.Interop.PowerPoint;
using System.Windows;
using System.Collections;
using System.Windows.Controls;
namespace PPTDraw.PPTOperate
{
    /// <summary>
    /// PPT文檔操作實現類.
    /// </summary>
    public class OperatePPT
    {

    #region=========基本的參數信息=======
    POWERPOINT.Application objApp = null;
    POWERPOINT.Presentation objPresSet = null;
    POWERPOINT.SlideShowWindows objSSWs;
    POWERPOINT.SlideShowTransition objSST;
    POWERPOINT.SlideShowSettings objSSS;
    POWERPOINT.SlideRange objSldRng;
    bool bAssistantOn;
    double pixperPoint = 0;
    double offsetx = 0;
    double offsety = 0;
    #endregion
    #region===========操作方法==============
    /// <summary>
    /// 打開PPT文檔并播放顯示。
    /// </summary>
    /// <param name="filePath">PPT文件路徑</param>
    public void PPTOpen(string filePath)
    {
        //防止連續打開多個PPT程序.
        if (this.objApp != null) { return; }
        try
        {
            objApp = new POWERPOINT.Application();
            //以非只讀方式打開,方便操作結束后保存.
            objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
            //Prevent Office Assistant from displaying alert messages:
            bAssistantOn = objApp.Assistant.On;
            objApp.Assistant.On = false;
            objSSS = this.objPresSet.SlideShowSettings;
            objSSS.Run();
        }
        catch (Exception ex)
        {
            this.objApp.Quit();
        }
    }
    /// <summary>
    /// 自動播放PPT文檔.
    /// </summary>
    /// <param name="filePath">PPTy文件路徑.</param>
    /// <param name="playTime">翻頁的時間間隔.【以秒為單位】</param>
    public void PPTAuto(string filePath, int playTime)
    {
        //防止連續打開多個PPT程序.
        if (this.objApp != null) { return; }
        objApp = new POWERPOINT.Application();
        objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoCTrue, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
        // 自動播放的代碼(開始)
        int Slides = objPresSet.Slides.Count;
        int[] SlideIdx = new int[Slides];
        for (int i = 0; i < Slides; i++) { SlideIdx[i] = i + 1; };
        objSldRng = objPresSet.Slides.Range(SlideIdx);
        objSST = objSldRng.SlideShowTransition;
        //設置翻頁的時間.
        objSST.AdvanceOnTime = OFFICECORE.MsoTriState.msoCTrue;
        objSST.AdvanceTime = playTime;
        //翻頁時的特效!
        objSST.EntryEffect = POWERPOINT.PpEntryEffect.ppEffectCircleOut;
        //Prevent Office Assistant from displaying alert messages:
        bAssistantOn = objApp.Assistant.On;
        objApp.Assistant.On = false;
        //Run the Slide show from slides 1 thru 3.
        objSSS = objPresSet.SlideShowSettings;
        objSSS.StartingSlide = 1;
        objSSS.EndingSlide = Slides;
        objSSS.Run();
        //Wait for the slide show to end.
        objSSWs = objApp.SlideShowWindows;
        while (objSSWs.Count >= 1) System.Threading.Thread.Sleep(playTime * 100);
        this.objPresSet.Close();
        this.objApp.Quit();
    }
    /// <summary>
    /// PPT下一頁。
    /// </summary>
    public void NextSlide()
    {
        if (this.objApp != null)
            this.objPresSet.SlideShowWindow.View.Next();
    }
    /// <summary>
    /// PPT上一頁。
    /// </summary>
    public void PreviousSlide()
    {
        if (this.objApp != null)
            this.objPresSet.SlideShowWindow.View.Previous();
    }
    /// <summary>
    /// 對當前的PPT頁面進行圖片插入操作。
    /// </summary>
    /// <param name="alImage">圖片對象信息數組</param>
    /// <param name="offsetx">插入圖片距離左邊長度</param>
    /// <param name="pixperPoint">距離比例值</param>
    /// <returns>是否添加成功!</returns>
    public bool InsertToSlide(List<PPTOBJ> listObj)
    {
        bool InsertSlide = false;
        if (this.objPresSet != null)
        {
            this.SlideParams();
            int slipeint = objPresSet.SlideShowWindow.View.CurrentShowPosition;
            foreach (PPTOBJ myobj in listObj)
            {
                objPresSet.Slides[slipeint].Shapes.AddPicture(
                     myobj.Path,           //圖片路徑
                     OFFICECORE.MsoTriState.msoFalse,
                     OFFICECORE.MsoTriState.msoTrue,
                     (float)((myobj.X - this.offsetx) / this.pixperPoint),       //插入圖片距離左邊長度
                     (float)(myobj.Y / this.pixperPoint),       //插入圖片距離頂部高度
                     (float)(myobj.Width / this.pixperPoint),   //插入圖片的寬度
                     (float)(myobj.Height / this.pixperPoint)   //插入圖片的高度
                  );
            }
            InsertSlide = true;
        }
        return InsertSlide;
    }
    /// <summary>
    /// 計算InkCanvas畫板上的偏移參數,與PPT上顯示圖片的參數。
    /// 用于PPT加載圖片時使用
    /// </summary>
    private void SlideParams()
    {
        double slideWidth = this.objPresSet.PageSetup.SlideWidth;
        double slideHeight = this.objPresSet.PageSetup.SlideHeight;
        double inkCanWidth = SystemParameters.PrimaryScreenWidth;//inkCan.ActualWidth;
        double inkCanHeight = SystemParameters.PrimaryScreenHeight;//inkCan.ActualHeight ;
        if ((slideWidth / slideHeight) > (inkCanWidth / inkCanHeight))
        {
            this.pixperPoint = inkCanHeight / slideHeight;
            this.offsetx = 0;
            this.offsety = (inkCanHeight - slideHeight * this.pixperPoint) / 2;
        }
        else
        {
            this.pixperPoint = inkCanHeight / slideHeight;
            this.offsety = 0;
            this.offsetx = (inkCanWidth - slideWidth * this.pixperPoint) / 2;
        }
    }
    /// <summary>
    /// 關閉PPT文檔。
    /// </summary>
    public void PPTClose()
    {
        //裝備PPT程序。
        if (this.objPresSet != null)
        {
            //判斷是否退出程序,可以不使用。
            //objSSWs = objApp.SlideShowWindows;
            //if (objSSWs.Count >= 1)
            //{
                if (MessageBox.Show("是否保存修改的筆跡!", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                    this.objPresSet.Save();
            //}
            //this.objPresSet.Close();
        }
        if (this.objApp != null)
            this.objApp.Quit();
        GC.Collect();
    }
    #endregion
}

}</pre>

 本文由用戶 b5cw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!