(转)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

时间: 2024-08-03 12:58:30

(转)C#操作PPT的相关文章

C++通过COM接口操作PPT

一. 背景说明 在VS环境下,开发C++代码操作PPT,支持对PPT模板的修改.包括修改文本标签.图表.表格.满足大多数软件生成PPT报告的要求,先手工创建好PPT模板,在程序中修改模板数据. 二. 开发环境构建 通过VS2012的Class Wizard创建PowerPoint和Excel的COM接口:由于需要操作PPT中的图表,而图表的数据使用Excel存储的,需要修改图表的数据就得生成Excel的COM接口. 1.1 进入类向导 1.2 添加PowerPoint COM接口 1.3 添加E

JAVA通过COM接口操作PPT

一. 背景说明 在Eclipse环境下,开发JAVA代码操作PPT,支持对PPT模板的修改.包括修改文本标签.图表.表格.满足大多数软件生成PPT报告的要求,即先收工创建好模板,在程序中修改模板数据. 二. 开发环境搭建 下载jacob开源组件,解压后把jacob.jar添加到项目中.拷贝对应的dll文件到Path路径下.32位系统采用X86的dll, 64位系统采用X64的dll. 三. 实现合并PPT函数 1.1 合并PPT /** * 合并多个PPT文件.要求输出文件和合并文件均已存在,不

C# 操作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.Windo

c#如何操作ppt的播放

C#控制ppt的代码 包括打开ppt文件.读取幻灯页,插入幻灯片,自动播放等 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.Collec

使用POI操作PPT文档(插入文本、图片)转

1)如果是创建新的PPT文档,直接使用SlideShow和Slide类就可以,其中SlideShow表示PPT文档,Slide表示某一张幻灯片如下代码创建空的PPT文档: 1 SlideShow ppt = new SlideShow(); 2 Slide[] slides = ppt.getSlides(); 3 assertTrue(slides.length == 0); 4 savePPTFile(ppt); 5 6 private void savePPTFile(SlideShow

c# 操作PPT

前段时间要做一个把指定图片放到新建的ppt的东西,在网上找了点资料看了一下,发现用C#做好像是最简单的一个,一下是在网上找的一段代码,直接贴进去就能够执行,可是在执行之前一定要加入dll支持: 项目->加入引用->com->microsoft office object libraty 项目->加入引用->com->microsoft powerpoint object libraty using System; using System.Collections.Gen

Jacob操作office文档(Word,PPT,Excel)

public boolean doc2pdf(String srcFilePath, String pdfFilePath) { ActiveXComponent app = null; Dispatch doc = null; try { ComThread.InitSTA(); app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", false); Dispatch d

python操作word、ppt的详解

python使用win32com的心得 python可以使用一个第三方库叫做win32com达到操作com的目的, 我是安装了ActivePython的第三方库,从官网下载了安装包,该第三方库几乎封装了所有python下面的win32相关的操作,例如win32api,win32gui等等,可以说是比较齐全的了,下载地址可以自行百度获取.         主要是有个项目可能要用到ppt转换成视频的功能. 之后在想使用com操作excel还有word,ppt的时候,相信大部分人跟我一样,都是搜索py

Microsoft word/Excel/PPT打开报错问题

很多时候我们会发现我们辛辛苦苦从网上.论坛或QQ群等地下载下来的文档.表格.PPT竟然打不开,许多人以为是文件的问题,直接删除了,而身边很多朋友会将此类问题发于我让我一一解答,其实这些问题,网上都有相关的解决方法的,所以今天我在这里再为大家综合整理一番,供身边的同事.朋友及大家更好的参考学习. 一.EXCEL问题: 报错信息如下: 内存或磁盘空间不足,MICROSOFT EXCEL 无法再次打开或保存任何文档. 要想获得更多的可用内存,请关闭不再使用的工作薄或程序. 要想释放磁盘空间,请删除相应