如何以编程方式判断word文档是否已损坏?

时间:2009-05-29 02:19:33

标签: .net interop ms-word ms-office

我有一个小小的C#应用​​程序,可以将一堆单词.doc文件转换为文本文件,并且大部分工作正常。

但是,如果文档已损坏,则word无法打开文件并弹出一个对话框,这意味着我无法完全自动化此转换过程 - 有人必须注意对话框。

有没有办法测试一个单词.doc是否已经破坏,而不打开它?也许通过单词互操作或者可能通过第三方工具。

我有一个想法是产生一个执行转换的线程并在进程打开时间超过n秒时将其终止,但我想知道是否有更简单的方法?

2 个答案:

答案 0 :(得分:3)

确定 Word 是否会认为该文件已损坏的唯一确定方法是让Word打开它:-)。我认为任何第三方应用程序在这方面都不会100%可靠 - 毕竟,该文档可能实际上已损坏,但如果Word认为它不会对您有所帮助。但是,显然您可以检测到某些情况,例如文件为零大小或类似情况。

我没有遇到过很多(任何?)损坏的文件,所以我想知道你看到的腐败是否会遵循你能检测到的模式?例如,这些文件是从某个地方下载的,通常会丢失文件的后半部分吗?

在任何情况下,损坏的文件不是Word可能弹出对话框的唯一原因。其他原因包括:

  • 该文件受密码保护
  • 该文件包含指向其他文件的链接
  • 该文件包含宏(可能会弹出对话框,或者可能导致出现安全警告对话框)

您可以使用Application.DisplayAlerts等来避开其中一些,但不是全部(尤其是安全警告)。

我使用第二个线程检测到Office所拥有的对话框(对于那些它识别出来的对象)按下了一个合适的按钮,我取得了一些成功。它不是很优雅,但确实有效。是的,如果执行某些操作的时间太长,我的第二个线程也将终止该应用程序。

答案 1 :(得分:0)

根据应用程序的性质,如果它是没有UI交互的服务器端应用程序,则使用Office自动化可能会出现问题。 (见链接:http://support.microsoft.com/kb/257757

如果是Office 2007+,最好的方法是使用OpenXML。如果是旧文件,则可以使用某些第三方工具,例如aspose API