Открытие документов Word через Interop

145
30 марта 2018, 09:46

В общем, при открытии документа я заметил, что может происходить 2 проблемы:

1)Если документ кем-то открыт, то появится диалог, открыть ли документ в режиме ReadOnly.

2)Если документ поврежден, то не программа зависается, хотя на самом деле вылетает невидимый диалог "Документ при открытии кританул серьезной ошибкой, открыть?"

Как можно решить данные проблемы? В первой случае хочу, что бы диалога не было и он открывался в ReadOnly, а во втором повесить какой-нибудь TimeOut, что бы по его истечению переходить к открытию следующего документа, либо так же, что бы ответ был ДА.

Answer 1

Не уверен, что помогу своим ответом.
Тем более, что из твоих тегов я знаю только слово Ворд и то - конвейера 2003 года :)

Я давно делал так, пытаясь изолироваться от всех этих внутренних механизмов Офиса, - пытался открыть файл на запись.
Если не получалось, то:
- откладывал до поры, или ...
- предпринимал действия, чтобы его закрыли, или ...
- пытался открыть на чтение - это должно всегда всегда получаться - и по ОК копировал его в другое место. Там с ним и работал. Потом возвращал, измененный, взад.

Есно, что "открыть на чтение-запись" - не Вордом, а встроенными средствами VB(A).

В твоем случае (тем более, что ты акцентируешься на "Если документ поврежден") - сам бог велел работать с ним в песочнице. Да и поиметь походу резервную копия при этом на всякий пожарный... .

Answer 2

В первом случае хочу, что бы диалога не было и он открывался в 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. Например: выделить всю обработку файла в отдельный поток, затем по таймауту убивать поток и очищать все его ресурсы.

READ ALSO
перемещение stl модели в пространстве

перемещение stl модели в пространстве

Необходимо реализовать просмотр и перемещение stl модели

158
Аналог Nunit атрибута TestCase в MSTest

Аналог Nunit атрибута TestCase в MSTest

Подскажите какой атрибут в MSTest является аналогом атрибута [TestCase] в фреймворке NUnit?

163
PreviewKeyDown для Grid и TextBox

PreviewKeyDown для Grid и TextBox

Есть TextBox-ы в одном GridПо атрибуту PreviewKeyDown в TextBox перемещается курсор из одного TextBox в другой:

184
Замена текста в документе Word

Замена текста в документе Word

Как заменить текст в документе Word, пробую - не получается:

171