我有一个小小的C#应用程序,可以将一堆单词.doc文件转换为文本文件,并且大部分工作正常。
但是,如果文档已损坏,则word无法打开文件并弹出一个对话框,这意味着我无法完全自动化此转换过程 - 有人必须注意对话框。
有没有办法测试一个单词.doc是否已经破坏,而不打开它?也许通过单词互操作或者可能通过第三方工具。
我有一个想法是产生一个执行转换的线程并在进程打开时间超过n秒时将其终止,但我想知道是否有更简单的方法?
答案 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