【问题标题】:Determine if MS Word finished saving the document确定 MS Word 是否完成了文档的保存
【发布时间】:2013-10-31 17:08:25
【问题描述】:

我有一个 Silverlight 5.0 应用程序并提供 MS Word 自动化功能,用户可以在其中编辑/添加新文档。我已经浏览了 MSDN 页面,但在保存文档后找不到 MS Word 触发的任何事件。唯一谈论保存的事件是没有帮助的“DocumentBeforeSave”事件。我需要知道 MS Word 何时完成保存文档,以便它可以保存到服务器。

有人可以帮我解决这个问题吗?

任何想法都非常受欢迎。

【问题讨论】:

    标签: silverlight-5.0 office-interop


    【解决方案1】:
    using MSWord = Microsoft.Office.Interop.Word;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main()
            {
                var app = new MSWord.Application();
                var doc = app.Documents.Open(@"..\..\myDoc.docx");
    
                app.DocumentBeforeSave += app_DocumentBeforeSave;
            }
    
            static void app_DocumentBeforeSave(MSWord.Document Doc, ref bool SaveAsUI, ref bool Cancel)
            {
                app.DocumentBeforeSave -= app_DocumentBeforeSave;
    
                Cancel = true;
                Doc.Save();
    
                if(Doc.Saved){
                    //Now you know the document has saved
                }
    
                app.DocumentBeforeSave += app_DocumentBeforeSave;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      Save 方法不会在单独的线程上运行,因此它只会在 Save 完成后返回。

      DocumentBeforeSave 事件接受一个布尔调用 Cancel,它与 ref 参数一起传递,并将其设置为 true 会取消即将发生的保存。

      您可以将其设置为 true,然后自己调用 Save,这样您就会知道保存何时完成,因为它在同一个线程上运行,如下所示:

      using MSWord = Microsoft.Office.Interop.Word;
      
      namespace ConsoleApplication41
      {
          class Program
          {
              static void Main()
              {
                  var app = new MSWord.Application();
                  var doc = app.Documents.Open(@"..\..\myDoc.docx");
      
                  app.DocumentBeforeSave += app_DocumentBeforeSave;
              }
      
              static void app_DocumentBeforeSave(MSWord.Document Doc, ref bool SaveAsUI, ref bool Cancel)
              {
                  Cancel = true;
                  Doc.Save();
      
                  //Now you know the document has saved
              }
          }
      }
      

      【讨论】:

      • 我们不调用 MS Word Automation 的 Save() 方法,所以我们真的不知道 word 何时完成保存文件。
      • 那你怎么保存文件呢?
      • 保存文件由用户通过单击保存(在菜单栏中)按钮或在询问时单击保存(在模式对话框中)来调用。此时,“DocumentBeforeSave”事件将触发(文档尚未保存为事件名称所暗示的)。我们需要一个在 MS Word 完成保存时触发的事件。据我所知,上面的代码示例不能应用于 Silverlight 5 应用程序,因为不支持将 MS Word 引用添加到项目中,而是使用“动态”和 AutomationFactory 类
      猜你喜欢
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2015-03-15
      相关资源
      最近更新 更多