C# 在窗口中显示MS Word文档以进行编辑

C# 在窗口中显示MS Word文档以进行编辑,c#,wpf,ms-word,C#,Wpf,Ms Word, 您好,我正在构建与Microsoft Office word文档(.docx)通信的windows C#WPF应用程序。应用程序应使用用户输入更新.docx模板文件,此步骤使用OpenXML成功完成。应用程序的另一部分是在应用程序窗口内或使用MS word向用户显示已编辑的word文档,并允许用户在需要时添加更多信息。 我面临的问题是: 当word文档打开时,我应该禁用我的应用程序控件,当word关闭时我应该启用它们,我还想知道是否保存了word应用程序(如果用户进行了更改)。 下一个代码是打

 您好,我正在构建与Microsoft Office word文档(.docx)通信的windows C#WPF应用程序。应用程序应使用用户输入更新.docx模板文件,此步骤使用OpenXML成功完成。应用程序的另一部分是在应用程序窗口内或使用MS word向用户显示已编辑的word文档,并允许用户在需要时添加更多信息。
 我面临的问题是: 当word文档打开时,我应该禁用我的应用程序控件,当word关闭时我应该启用它们,我还想知道是否保存了word应用程序(如果用户进行了更改)。
 下一个代码是打开word文档的按钮单击事件:

using System.Windows;
using Microsoft.Office.Interop.Word;
using Application = Microsoft.Office.Interop.Word.Application;

public class MainWindowViewModel : BaseViewModel
{
    ...
    ... some view model initialization
    ...
    public bool AreControlsEnabled { get; set; } = true;

    private void OpenWord ()
    {
        AreControlsEnabled = false;

        var app = new Application()
        {
            Visible = true
        };

        var doc = app.Documents.Open("pathtofile.docx");
        var docClass = app.ActiveDocument as DocumentClass;
        docClass.DocumentEvents2_Event_Close += DocClass_DocumentEvents2_Event_Close;
        docClass.DocumentEvents_Event_Close += DocClass_DocumentEvents_Event_Close;
        app.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(DocBeforeClose);
        app.DocumentBeforeSave += new ApplicationEvents4_DocumentBeforeSaveEventHandler(DocBeforeSave);
    }

    private void DocClass_DocumentEvents2_Event_Close ()
    {
        MessageBox.Show("DocClass_DocumentEvents2_Event_Close");
        AreControlsEnabled = true;
    }

    private void DocClass_DocumentEvents_Event_Close ()
    {
        MessageBox.Show("DocClass_DocumentEvents_Event_Close");
        AreControlsEnabled = true;
    }

    private void DocBeforeClose (Document doc, ref bool cancel)
    {
        MessageBox.Show("DocBeforeClose");
        AreControlsEnabled = true;
    }

    private void DocBeforeSave (Document doc, ref bool SaveAsUI, ref bool cancel)
    {
        MessageBox.Show("DocBeforeSave");
        AreControlsEnabled = true;
    }
}
 当我运行代码时——我看到了预期打开的MS Word文档,但当我关闭或保存它时——没有触发任何事件,我不明白为什么。此外,我可以使用System.Diagnostics.Process启动Word并向其添加退出事件,但通过这种方式,我无法知道用户是否应用了某些更改。所以,如果有人解决了这个问题,请帮助我。
  感谢您的阅读和回答

您可以:

  • 获取文件的当前更改日期
  • 使用System.Diagnostics.Process启动Word
  • 流程结束后,再次检查更改的日期
  • 如果用户保存了文件,则更新更改的日期

如果用户只是关闭文档而不是word,我不知道进程是否仍在运行。为此,您可以查看Dokument For thos~的文件夹。。。Word在文档打开时创建临时文件…

谢谢,我也在考虑同样的方法。我会尽力去做的