Как программно определить, поврежден ли текст документа? - PullRequest
3 голосов
/ 29 мая 2009

У меня есть небольшое приложение на C #, которое взаимодействует со словом, преобразующим кучу файлов Word .doc в текстовые файлы, и по большей части это работает нормально.

Однако, если документ прерывается, слово не может открыть файл, и появляется диалоговое окно, что означает, что я не могу полностью автоматизировать этот процесс преобразования - кто-то должен следить за диалогами.

Есть ли способ проверить, является ли слово .doc кратким, не открывая его? Возможно, через взаимодействие слов или, возможно, с помощью стороннего инструмента.

Одна идея, которая у меня возникла, - создать поток, который выполняет преобразование, и убить его, если процесс открыт дольше, чем n секунд, но мне было интересно, есть ли более простой способ?

Ответы [ 2 ]

3 голосов
/ 29 мая 2009

Единственный надежный способ определить, будет ли Word считать, что файл поврежден, - это заставить Word открыть его :-). Я не думаю, что какое-либо стороннее приложение будет на 100% надежным в этом отношении - в конце концов, документ может на самом деле не быть поврежденным, но это не поможет вам, если Word считает, что это есть . Тем не менее, очевидно, что вы можете обнаружить некоторые ситуации, например, файл нулевого размера или тому подобное.

Я не сталкиваюсь со многими (какими-либо?) Поврежденными документами, поэтому мне интересно, может ли наблюдаемая вами коррупция соответствовать шаблону, который вы можете обнаружить? Например, эти документы загружаются откуда-то и обычно пропускают последнюю часть файла или что-то еще?

В любом случае поврежденный файл - не единственная причина, по которой Word может открыть диалоговое окно. Другие причины включают в себя:

  • файл защищен паролем
  • файл содержит ссылки на другие файлы
  • файл содержит макросы (которые могут сами всплывать в диалоговых окнах или могут вызывать появление диалогового окна с предупреждением о безопасности)
  • и т.д.

Некоторые из них можно обойти, используя Application.DisplayAlerts и т. Д., Но не все (особенно предупреждение безопасности).

У меня был некоторый успех с использованием 2-го потока, который обнаруживает диалоговые окна, принадлежащие Office, и (для тех, которые он распознает) нажимает соответствующую кнопку. Это вряд ли элегантно, но это работает. И да, мой второй поток также завершит работу приложения, если для выполнения определенных операций потребуется слишком много времени.

0 голосов
/ 29 августа 2014

В зависимости от характера вашего приложения, если это приложение на стороне сервера без взаимодействия с пользовательским интерфейсом, при использовании автоматизации Office могут возникнуть проблемы. (см. ссылку здесь: http://support.microsoft.com/kb/257757)

Если это Office 2007+, лучше всего использовать OpenXML. Если это более старые файлы, то могут использоваться некоторые сторонние инструменты, например, aspose API

...