【问题标题】:Word 2007/2010: Accessing Microsoft.Office.Interop.Word.Document.SaveFormat property crashes WordWord 2007/2010:访问 Microsoft.Office.Interop.Word.Document.SaveFormat 属性会使 Word 崩溃
【发布时间】:2013-02-01 01:49:15
【问题描述】:

我们正在尝试访问 Microsoft.Office.Interop.Word.Document 实例的 SaveFormat 属性(我猜它在技术上是一个 DocumentClass 实例,因为 Document 是一个接口)。在尝试读取 SaveFormat 时,Word 会非常不优雅地崩溃。将访问包装在 try..catch 块中也不好;控制权正在传递给另一个程序集,该程序集决定终止应用程序,而不是抛出异常让我重新捕获。

无论我只是在代码中读取属性,都会发生这种情况,如下所示:

WdSaveFormat saveFormat = this.document.SaveFormat; // document is a Microsoft.Office.Interop.Word.Document

或者当我使用调试器访问 Watch 中的属性时。

我怀疑文档实例本身没有问题;它的其他属性(例如,路径)可以反映在。在文档对象上运行快速监视会产生看起来合法的值,而不是一堆引发危险的“无法评估”、“空”等值。我可以在 Quickwatch 窗口中逐行向下滚动,一旦进入 SaveFormat,它就会爆炸。

崩溃发生在 Word 2007 和 Word 2010 中。

我尝试过嵌入 PIA 类型而不是嵌入它们(引用属性中的“嵌入互操作类型”标志)

我尝试引用 Word 2007 PIA 而不是 2010 版本。同样的行为。

我们在项目中以 .NET 4.0 为目标,但我也尝试以 3.5 为目标。没有变化。

有什么想法吗?即将取消我的比赛:)

【问题讨论】:

  • 这种情况是仅针对特定文档还是针对所有文档?我怀疑问题与您的代码无关,而是与文档或 Word 安装本身有关。您能否检查一下在 Word 中打开文档时会发生什么,打开 VBA 编辑器 (Alt+F11) 并在即时窗口中输入 ?ActiveDocument.SaveFormat(Ctrl+G 打开窗口)然后按 Return我>?.

标签: ms-word vsto ms-office office-pia


【解决方案1】:

原来该文档是一个零字节文件。我们很糟糕,但如果 Word 抛出一个有用的异常(类似于在没有打开文档的情况下尝试访问 Application.ActiveDocument 时发生的情况),而不是直接炸毁,那就太好了。哦,好吧,大谜团解开了。 :) 感谢 0xA3 建议文档本身可能是问题所在。是否有过思维单一而忘记关注显而易见的事情的经历?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多