2016-11-25 9 views
-1

Я пишу программу в C#, которая снимает скриншоты и вставляет их в заранее определенные закладки в файле шаблона Microsoft Word (.dot).Microsoft Word Interop: COMException

код прекрасно работает на Microsoft Word 2007, но не случайно на Microsoft Word 2016.

Я делаю это с помощью следующей строки кода:

// wdoc is a word document object 
// bookMarkName is pre-defined in the code 
wdoc.Bookmarks.get_Item(ref bookMarkName).Range.Paste(); 

код прекрасно работает на Word 2007 , но когда я запускаю его на слово 2016 года, он работает в течение некоторого времени, а затем терпит неудачу в строке выше, показывает следующее сообщение об ошибке:

System.Runtime.InteropServices.COMException (0x800A1066): Command failed at 
Microsoft.Office.Interop.Word.Range.Paste() 

Как заставить его работать на слово 2016 года?

+0

У меня возникло много проблем, таких как вы с micrsofot.office.interop. это иногда просто не очень стабильно. Я получил лучший опыт, если я убил все текстовые процессы, а затем запустил код. не знаю, поможет ли это вашей проблеме – user1519979

+0

Спасибо. Я уже это сделал. – NavkarJ

+0

Это выглядит как неустойчивая проблема. Эти типы (я нахожу) наиболее сложны для решения даже со всеми настройками среды и всем исходным кодом в руке. Вы просите об оказании помощи без информации. Полагаю, именно поэтому вы получили вниз. – parvee

ответ

0

После того, как вы нашли часы в Интернете, я нашел решение вышеуказанной проблемы и очень простой.

Очевидная проблема заключалась в том, что Word 2016 не полностью поддерживал библиотеки Interop для Word 2007, которые использовались для разработки.

Итак, если вы создаете программу, которая использует Interop для взаимодействия с приложениями Microsoft Office, создайте программу с различными библиотеками Interop для разных версий. Было бы лучше, если бы программа автоматически использовала библиотеки Interop, установленные в целевой системе, потому что это сделало бы ее независимой от версии Microsoft Office, установленной в системе, но, насколько я ее просматривал, это невозможно в настоящее время ,

И если вам интересно, как вы будете загружать библиотеки Interop для разных версий Microsoft Office, мой совет заключается в том, чтобы не делать этого, а вместо этого строить программу отдельно для каждой версии MS Office (путем ее создания в системе, на которой установлена ​​эта версия MS Office) и распространять вашу программу отдельно для разных версий Office. Таким образом, пользователь может выбрать загрузку соответствующей версии вашей программы в соответствии с установленной версией MS Office в своей системе.