目前我在C#中有一个WPF应用程序,但我发现找到将PowerPoint演示文稿嵌入窗口的任何有用方法都非常困难。
我在这里找到了一个解决方案:Embedding a Powerpoint show into a C# application
此解决方案产生了在另一个窗口中运行PowerPoint的问题,但只是在WPF应用程序中显示其UI。这意味着当WPF窗口被聚焦时,PowerPoint演示文稿没有,并且停止播放。当窗口关闭时,还存在PowerPoint崩溃的问题。
我找到的另一个解决方案是:http://www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP
解决方案很受欢迎,但我发现它很难处理。我不知道任何Win32编程,或者是C ++,所以我发现它很难修改。我设法让它停止显示PowerPoint的第二个副本(原始项目中的预期功能),但我还没有找到一种方法来自动打开PowerPoint演示文稿。
所以我需要的是一种自动和在后台干净地打开PowerPoint演示文稿的方法(我不希望在任何时候显示PowerPoint UI),并允许它自动运行(而不是响应输入)在应用程序运行时。如果我能将它保存在C#和WPF中,并且不必处理Win32和C ++,那将是非常好的。
这可能吗?在这一点上,我真的后悔这个项目只是因为PowerPoint集成的麻烦。
答案 0 :(得分:11)
您可以将演示文稿转换为动态视频格式:
// not tested as I don't have the Office 2010, but should work
private string GetVideoFromPpt(string filename)
{
var app = new PowerPoint.Application();
var presentation = app.Presentations.Open(filename, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);
var wmvfile = Guid.NewGuid().ToString() + ".wmv";
var fullpath = Path.GetTempPath() + filename;
try
{
presentation.CreateVideo(wmvfile);
presentation.SaveCopyAs(fullpath, PowerPoint.PpSaveAsFileType.ppSaveAsWMV, MsoTriState.msoCTrue);
}
catch (COMException ex)
{
wmvfile = null;
}
finally
{
app.Quit();
}
return wmvfile;
}
然后你会用MediaElement
:
<MediaElement Name="player" LoadedBehavior="Manual" UnloadedBehavior="Stop" />
public void PlayPresentation(string filename)
{
var wmvfile = GetVideoFromPpt(filename);
player.Source = new Uri(wmvfile);
player.Play();
}
完成视频播放后,请不要忘记File.Delete(wmvfile)
!
答案 1 :(得分:2)
使用/ s标志通过命令行启动演示文稿将播放幻灯片,而不启动闪屏。
powerpnt.exe /s c:\path\to\your\presentation.pptx
我会尝试与您提到的某些WPF嵌入式解决方案一起使用或查看this approach。
我对WPF知之甚少,所以希望有人可以提供更好的答案,包含所有这些内容。
答案 2 :(得分:1)
我真的不喜欢它,我不确定这适用于你的情况。你需要访问演示文稿,这是肯定的。 相当容易和轻量级。
我的基本想法是以某种方式将powerpoint演示文稿嵌入到html中,并使用webbrowser控件来显示它。似乎有number of ways这样做。
我决定尝试将演示文稿直接保存为html,结果证明是可能的(至少对于PP2010而言),尽管布局可能更好。另一种方法(例如谷歌文档)可能会产生更好的效果。我从link获得了以下内容。
在“立即”窗格中,键入以下内容,然后按Enter键:
ActivePresentation.SaveAs "<Drive>:\users\<username>\desktop\<filename>.htm", ppSaveAsHTML, msoFalse
注意要使用单个文件网页(* .mht; * .mhtml)文件格式进行保存,请将 mht 替换为文件名末尾的htm ,并用 ppSaveAsWebArchive 替换ppSaveAsHTML。
如果你用htm导出它,你会得到很多额外的文件,因为它只是一个文件,所以更适合我。我非常确定如果您需要对解决方案进行通用化,也可以在代码中自动执行此步骤。
要在webbrowser控件中显示html文件是一件容易的事情,为了方便我将其上传到我的Dropbox并设置了源代码(如果你想看一下,我会把它放在那里几天它直接)。
至于立即开始幻灯片放映,我将不得不再研究一下。
<WebBrowser x:Name="webbrowser" Source="https://dl.dropbox.com/u/27614341/test.mht"/>
答案 3 :(得分:1)
有一个名为DocumentViewer
的WPF控件。
Document
属性。 Here是将办公文档(包括pptx
)转换为C sharp中的XPS的链接。
XAML
<DocumentViewer Name="myDocumentViewer" Margin="0,0,0,59">
</DocumentViewer>
绑定到控件的Document
属性(请注意ConvertPptxDocToXPSDoc
是将pptx转换为xps的方法)
myDocumentViewer.Document = this.ConvertPptxDocToXPSDoc(this.FileName, this.newXPSDocumentName).GetFixedDocumentSequence();