В общем, при открытии документа я заметил, что может происходить 2 проблемы:
1)Если документ кем-то открыт, то появится диалог, открыть ли документ в режиме ReadOnly.
2)Если документ поврежден, то не программа зависается, хотя на самом деле вылетает невидимый диалог "Документ при открытии кританул серьезной ошибкой, открыть?"
Как можно решить данные проблемы? В первой случае хочу, что бы диалога не было и он открывался в ReadOnly, а во втором повесить какой-нибудь TimeOut, что бы по его истечению переходить к открытию следующего документа, либо так же, что бы ответ был ДА.
Не уверен, что помогу своим ответом.
Тем более, что из твоих тегов я знаю только слово Ворд и то - конвейера 2003 года :)
Я давно делал так, пытаясь изолироваться от всех этих внутренних механизмов Офиса, - пытался открыть файл на запись.
Если не получалось, то:
- откладывал до поры, или ...
- предпринимал действия, чтобы его закрыли, или ...
- пытался открыть на чтение - это должно всегда всегда получаться - и по ОК копировал его в другое место. Там с ним и работал. Потом возвращал, измененный, взад.
Есно, что "открыть на чтение-запись" - не Вордом, а встроенными средствами VB(A).
В твоем случае (тем более, что ты акцентируешься на "Если документ поврежден") - сам бог велел работать с ним в песочнице. Да и поиметь походу резервную копия при этом на всякий пожарный... .
В первом случае хочу, что бы диалога не было и он открывался в ReadOnly
У Documents.Open
есть аргумент ReadOnly
с помощью которого можно сразу открывать для чтения:
var document = wordApplication.Documents.Open(filename, ReadOnly:true);
во втором повесить какой-нибудь TimeOut, что бы по его истечению переходить к открытию следующего документа, либо так же, что бы ответ был ДА.
Чтобы ответ был «да» можно попробовать отключить флагами все возможные подтверждения при открытии:
document = word.Documents.Open(PATH,
ReadOnly:true,
ConfirmConversions:false,
NoEncodingDialog:true);
Что касается таймаута, то не думаю, что Word Interop предусматривает такую возможность. Можно попробовать написать это средствами .Net. Например: выделить всю обработку файла в отдельный поток, затем по таймауту убивать поток и очищать все его ресурсы.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите какой атрибут в MSTest является аналогом атрибута [TestCase] в фреймворке NUnit?
Есть TextBox-ы в одном GridПо атрибуту PreviewKeyDown в TextBox перемещается курсор из одного TextBox в другой: