zoukankan      html  css  js  c++  java
  • (转)C#操作PPT

         原文地址:http://blog.163.com/loveyingchun_1314/blog/static/2382425120124312627530/

           引用Microsoft.Office.Core时需要在com选项中添加Microsoft Office 12.0 Object Library(我的Office版本是2007),如果没有这个需要修改Office添加开发支持(开始-程序-Office更改)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using POWERPOINT =Microsoft.Office.Interop.PowerPoint;
    using OFFICECORE = Microsoft.Office.Core;
    using System.Windows;
    using System.Windows.Forms;
    using System.Windows.Forms.ComponentModel;
    
    
    namespace TestPPT
    {
        public class clsOPPPT
        {
            POWERPOINT.Application objApp = null;
            POWERPOINT.Presentation objPresSet = null;
            POWERPOINT.SlideShowWindows objSSWs;
            POWERPOINT.SlideShowTransition objSST;
            POWERPOINT.SlideShowSettings objSSS;
            POWERPOINT.SlideRange objSldRng;
    
            bool bOpenState = false;
            bool bAssistantOn;
            double pixperPoint = 0;
            double offsetx = 0;
            double offsety = 0;
    
            public bool BOpenState
            {
                set { bOpenState = value;}
                get { return bOpenState;}
            }
    
             /// <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);
                    bAssistantOn = objApp.Assistant.On;//Prevent Office Assistant from displaying alert messages:
                    objApp.Assistant.On = false;
    
                    objSSS = this.objPresSet.SlideShowSettings;
                    objSSS.Run();
                    BOpenState = true;
                }
                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.msoFalse, 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();
                    //objPresSet.Slides[slipeint].Shapes.Count;
                    objPresSet.SlideShowWindow.View.Last();
                    int slipeint = objPresSet.SlideShowWindow.View.CurrentShowPosition;
    
                    Microsoft.Office.Interop.PowerPoint.CustomLayout pCustomLayout = this.objPresSet.Slides[1].CustomLayout;
                    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)                   //插入图片的高度
                          );
    
                        objPresSet.Slides.AddSlide(slipeint+1, pCustomLayout);
                        objPresSet.SlideShowWindow.View.Next();
                        slipeint = objPresSet.SlideShowWindow.View.CurrentShowPosition;
                    }
                    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();
            }
        }
    
        public class PPTOBJ
        {
            string path = "";
            float x;
            float y;
            float width;
            float height;
    
            public float X
            {
                set { x = value;}
                get{return x;}
            }
            public float Y
            {
                set { y = value; }
                get { return y; }
            }
            public float Width
            {
                set { width = value; }
                get { return width; }
            }
            public float Height
            {
                set { height = value; }
                get { return height; }
            }
            public string Path
            {
                set { path = value;}
                get { return path; }
            }
        }
    }

         附

              https://msdn.microsoft.com/zh-cn/library/ff746586.aspx

  • 相关阅读:
    关于动画的各种实现方法【转】
    关于弹出框的理念【转】
    jquery点击目标DIV以外关闭效果
    唯美诗句
    mouseover和this的巧用
    基于html5 canvas 的强大图表插件【Chart.js】
    关于百度地图API (持续跟新)
    JS的异步回调函数
    MMU内存管理单元(看书笔记)
    系统移植详细步骤
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/4630738.html
Copyright © 2011-2022 走看看