2016-11-25 12 views
-1

Ich schreibe ein Programm in C#, die Screenshots erstellt und sie vor vordefinierten Lesezeichen in einer Microsoft Word-Vorlage (.dot) -Datei fügt.Microsoft Word Interop: COMException

Der Code funktioniert auf Microsoft Word 2007 in Ordnung, aber nicht zufällig auf Microsoft Word 2016.

ich dies von Code durch die folgende Zeile zu tun:

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

Der Code funktioniert perfekt in Word 2007 , aber wenn ich es auf Word-2016 laufen, funktioniert es für einige Zeit und dann in der obigen Zeile fehlschlägt, wird folgende Fehler zeigt:

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

Wie es für Word 2016 funktioniert?

+0

Ich habe viele Probleme wie Sie mit micrsofot.office.interop. Manchmal ist es einfach nicht sehr stabil. Ich habe die besten Erfahrungen gemacht, wenn ich alle Wortprozesse killigniere und dann den Code ausführe. weiß nicht, ob es für Ihr Problem helfen wird – user1519979

+0

Danke. Ich habe das schon gemacht. – NavkarJ

+0

Das sieht wie ein zeitweiliges Problem aus. Diese Typen (ich finde) sind am schwierigsten zu lösen, selbst mit dem gesamten Umgebungs-Setup und dem gesamten Quellcode in der Hand. Sie bitten um Hilfe, indem Sie fast keine Informationen bereitstellen. Ich nehme an, deshalb wurden Sie abgelehnt. – parvee

Antwort

0

Nachdem ich stundenlang im Internet gesucht habe, fand ich eine Lösung für das obige Problem, und eine sehr einfache.

Das offensichtliche Problem war, dass Word 2016 die Interop-Bibliotheken für Word 2007, die für die Entwicklung verwendet wurden, nicht vollständig unterstützte.

Wenn Sie also ein Programm erstellen, das Interop für die Interaktion mit Microsoft Office-Anwendungen verwendet, erstellen Sie das Programm mit verschiedenen Interop-Bibliotheken für verschiedene Versionen. Es wäre besser, wenn das Programm automatisch Interop-Bibliotheken verwendet, die auf dem Zielsystem installiert sind, da dies es von der auf einem System installierten Version von Microsoft Office unabhängig machen würde, aber soweit ich es gesucht habe, ist das momentan nicht möglich . Wenn Sie sich wundern, wie Sie die Interop-Bibliotheken für verschiedene Versionen von Microsoft Office herunterladen würden, wäre mein Rat, dies nicht zu tun und stattdessen das Programm für jede Version von MS Office separat zu erstellen (indem Sie es erstellen) auf einem System, auf dem diese Version von MS Office installiert ist, und verteilen Sie Ihr Programm getrennt für verschiedene Office-Versionen. Auf diese Weise kann der Benutzer wählen, die entsprechende Version Ihres Programms, je nachdem, welche Version von MS Office auf seinem System installiert ist

Verwandte Themen