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窗口的主要内容,如果未能解决你的问题,请参考以下文章

c#操作WORD

C# Wpf 在运行时嵌入图像

C#中GDI如何连续绘制线段

如何在不打开另一个窗口的情况下将 PowerPoint 演示文稿嵌入到 WPF 应用程序中?

c# winform 点右上角关闭按钮的程序中如何加入一段代码

C# winForm程序窗体右上角X关闭按钮点击后 弹出提示文本 只有确定按钮点击后程序无法关闭