C#操作PowerPoint的方法
本文實(shí)例講述了C#操作PowerPoint的方法。分享給大家供大家參考。具體如下:
這里C#操作PowerPoint的基本代碼,包括打開(kāi)ppt文件、讀取幻燈頁(yè),插入幻燈片,自動(dòng)播放等
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文檔操作實(shí)現(xiàn)類(lèi).
/// </summary>
public class OperatePPT
{
#region=========基本的參數(shù)信息=======
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>
/// 打開(kāi)PPT文檔并播放顯示。
/// </summary>
/// <param name="filePath">PPT文件路徑</param>
public void PPTOpen(string filePath)
{
//防止連續(xù)打開(kāi)多個(gè)PPT程序.
if (this.objApp != null) { return; }
try
{
objApp = new POWERPOINT.Application();
//以非只讀方式打開(kāi),方便操作結(jié)束后保存.
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>
/// 自動(dòng)播放PPT文檔.
/// </summary>
/// <param name="filePath">PPTy文件路徑.</param>
/// <param name="playTime">翻頁(yè)的時(shí)間間隔.【以秒為單位】</param>
public void PPTAuto(string filePath, int playTime)
{
//防止連續(xù)打開(kāi)多個(gè)PPT程序.
if (this.objApp != null) { return; }
objApp = new POWERPOINT.Application();
objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoCTrue, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
// 自動(dòng)播放的代碼(開(kāi)始)
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;
//設(shè)置翻頁(yè)的時(shí)間.
objSST.AdvanceOnTime = OFFICECORE.MsoTriState.msoCTrue;
objSST.AdvanceTime = playTime;
//翻頁(yè)時(shí)的特效!
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下一頁(yè)。
/// </summary>
public void NextSlide()
{
if (this.objApp != null)
this.objPresSet.SlideShowWindow.View.Next();
}
/// <summary>
/// PPT上一頁(yè)。
/// </summary>
public void PreviousSlide()
{
if (this.objApp != null)
this.objPresSet.SlideShowWindow.View.Previous();
}
/// <summary>
/// 對(duì)當(dāng)前的PPT頁(yè)面進(jìn)行圖片插入操作。
/// </summary>
/// <param name="alImage">圖片對(duì)象信息數(shù)組</param>
/// <param name="offsetx">插入圖片距離左邊長(zhǎng)度</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), //插入圖片距離左邊長(zhǎng)度
(float)(myobj.Y / this.pixperPoint), //插入圖片距離頂部高度
(float)(myobj.Width / this.pixperPoint), //插入圖片的寬度
(float)(myobj.Height / this.pixperPoint) //插入圖片的高度
);
}
InsertSlide = true;
}
return InsertSlide;
}
/// <summary>
/// 計(jì)算InkCanvas畫(huà)板上的偏移參數(shù),與PPT上顯示圖片的參數(shù)。
/// 用于PPT加載圖片時(shí)使用
/// </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>
/// 關(guān)閉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
}
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#實(shí)現(xiàn)撲克游戲(21點(diǎn))的示例代碼
21點(diǎn)又名黑杰克,該游戲由2到6個(gè)人玩,使用除大小王之外的52張牌,游戲者的目標(biāo)是使手中的牌的點(diǎn)數(shù)之和不超過(guò)21點(diǎn)且盡量大。本文將用C#實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下2022-08-08
C# lambda表達(dá)式應(yīng)用如何找出元素在list中的索引
這篇文章主要介紹了C# lambda表達(dá)式應(yīng)用如何找出元素在list中的索引的相關(guān)資料,需要的朋友可以參考下2018-01-01
C# 字符串與unicode互相轉(zhuǎn)換實(shí)戰(zhàn)案例
這篇文章主要介紹了C# 字符串與unicode互相轉(zhuǎn)換實(shí)戰(zhàn)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
C#實(shí)現(xiàn)MQTT服務(wù)端與客戶(hù)端通訊功能
這篇文章介紹了C#實(shí)現(xiàn)MQTT服務(wù)端與客戶(hù)端通訊的功能,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
詳解C# Protobuf如何做到0分配內(nèi)存的序列化
這篇文章主要介紹了詳解C# Protobuf如何做到0分配內(nèi)存的序列化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
解析OpenXml?Pptx的邊框虛線(xiàn)轉(zhuǎn)為WPF的邊框虛線(xiàn)問(wèn)題
這篇文章主要介紹了OpenXml?Pptx的邊框虛線(xiàn)轉(zhuǎn)為WPF的邊框虛線(xiàn),在文中用PPTX的7種直線(xiàn),分別設(shè)置7種能夠設(shè)置的虛線(xiàn)類(lèi)型,具體實(shí)例代碼跟隨小編一起看看吧2021-12-12

