C#程序嵌入Word窗口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#程序嵌入Word窗口相关的知识,希望对你有一定的参考价值。
请问一下如何在C#的 winform中嵌入Word的窗口,要求能在程序运行时动态加载Word编辑窗口,并能使用Word的工具栏,编辑Word文档,并能保持编辑后的Word文档的数据!请问如何实现啊,网上找了很久啊,不知道如何实现啊!网上很多说可以使用WebBrowser控件,但是该控件是通过浏览文件的形式打开Word文档的啊,如何通过加载方式打开啊,就是在需要的时候调用Word的编辑窗口进来,并且从数据库中读取数据到该Word窗口进行编辑!如何实现啊!希望有代码啊!或者有方向都行啊!我的qq号是:804390150很急啊!在敢一个软件啊,有经验的朋友帮帮忙啊,感觉不进@!
参考技术A 你可以通过调用句柄嵌套,你可以后台运行一个word程序,
然后通过获取句柄来执行方法,
举个例就像打开一个word文件,获得word文件子窗体句柄嵌套到你得窗体中去,
至于句柄的调用要用到win32函数,
这些你可以参考下句柄的使用.
或者还有种方法是了解微软word程序接口,调用其程序
以上纯属个人想法,希望对你有帮助 参考技术B wewe
如何在不打开另一个窗口的情况下将 PowerPoint 演示文稿嵌入到 WPF 应用程序中?
【中文标题】如何在不打开另一个窗口的情况下将 PowerPoint 演示文稿嵌入到 WPF 应用程序中?【英文标题】:How can I embed a PowerPoint presentation into a WPF application without opening another window? 【发布时间】:2013-03-21 11:48:59 【问题描述】:目前我有一个 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 集成问题。
【问题讨论】:
另一种方法是将您的演示文稿转换为另一种格式,例如可以使用 WPF MediaPlayer 播放的视频。这可能会有所帮助:***.com/questions/13311579 这是个好主意。我会调查的。 @Joulukuusi 您的解决方案是最适合我们的解决方案。请创建一个答案,以便我可以给你赏金。 完成,但是,我没有 Office 2010,因此无法测试解决方案。如果它不适合你,我想你可以回答你自己的问题。 【参考方案1】:通过带有 /s 标志的命令行启动演示文稿将播放幻灯片而不启动启动屏幕。
powerpnt.exe /s c:\path\to\your\presentation.pptx
我会尝试与您提到的一些 WPF 嵌入解决方案配合使用,或者查看 this approach。
我对 WPF 知之甚少,所以希望有人能提供一个包含所有这些部分的更好的答案。
【讨论】:
【参考方案2】:我不太喜欢它,我不确定这是否适用于您的情况。您需要访问演示文稿,这是肯定的。然而,它相当简单和轻便。
我的基本想法是以某种方式将 powerpoint 演示文稿嵌入到 html 中,然后使用 webbrowser 控件来显示它。似乎有一个number of ways 可以做到这一点。
我决定尝试将演示文稿直接保存为 html,结果证明这是可能的(至少对于 PP2010),尽管布局可能会更好。另一种方法(例如谷歌文档)可能会产生更好的东西。我从这个link 中获取了以下内容。
在 PowerPoint 2010 中,打开要导出到的演示文稿 HTML 按 Alt+F11。 按 Ctrl+G。在“立即”窗格中,键入以下内容,然后按 Enter:
ActivePresentation.SaveAs "<Drive>:\users\<username>\desktop\<filename>.htm", ppSaveAsHTML, msoFalse
注意要使用单文件网页 (*.mht; *.mhtml) 文件格式保存,请将文件名末尾的 htm 替换为 mht ,并将 ppSaveAsHTML 替换为 ppSaveAsWebArchive。
如果你将它导出到 htm 中,你会得到很多额外的文件,在 mht 中它只是一个文件,所以更适合我。如果您需要通用解决方案,我很确定也可以在代码中自动执行此步骤。
要在 webbrowser 控件中显示 html 文件是很容易的部分,为了方便起见,我将它上传到了我的 Dropbox 并设置了源(如果你想看一下,我会把它放在那里几天直接)。
至于立即开始幻灯片放映,我得再研究一下。
<WebBrowser x:Name="webbrowser" Source="https://dl.dropbox.com/u/27614341/test.mht"/>
【讨论】:
在 WebBrowser 中显示 PowerPoint 演示文稿时,如何访问幻灯片数量等信息? 哦,没关系。我现在意识到Slide 1 of 3
部分是在转换为 html 期间添加的。【参考方案3】:
您可以即时将演示文稿转换为视频格式:
// 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)
!
【讨论】:
只要您的演示文稿不需要用户交互,这是一个相当不错的解决方案。 SaveCopyAs 需要很长时间,任何方法都可以在视频文件准备好后获取信号,因为我想在视频准备好后播放该视频。【参考方案4】:有一个名为 DocumentViewer
的 WPF 控件。
-
首先应将 pptx 转换为 .xps 文件格式。
然后将其绑定到 DocumentViewer 的
Document
属性。
Here 是将办公文档(包括pptx
)转换为CSharp 中的XPS 的链接。
XAML
<DocumentViewer Name="myDocumentViewer" Margin="0,0,0,59">
</DocumentViewer>
绑定到控件的Document
属性(注意ConvertPptxDocToXPSDoc
是pptx转xps的方法)
myDocumentViewer.Document = this.ConvertPptxDocToXPSDoc(this.FileName, this.newXPSDocumentName).GetFixedDocumentSequence();
【讨论】:
如果演示文稿有声音,这将不起作用,否则这是个好主意。 你看过以下帖子吗? post1post2以上是关于C#程序嵌入Word窗口的主要内容,如果未能解决你的问题,请参考以下文章
如何在不打开另一个窗口的情况下将 PowerPoint 演示文稿嵌入到 WPF 应用程序中?