maltek Geschrieben 20. Oktober 2011 Teilen Geschrieben 20. Oktober 2011 Hallo, ich versuche gerade Dateien aus den Öffentlichen Ordnern (Outlook) zu kopieren. Ich bin inzwischen soweit, dass ich alle Ordner durchlaufe und den Inhalt auch auslesen kann. Allerdings bekomme ich den Inhalt als System.__ComObject. Da die Anzahl der verschiedenen Typen überschaubar ist, wollte ich einfach schauen ob sich das Object in die entsprechenden Typen parsen lässt. z.B. as Microsoft.Office.Interop.Word.Document; So, nun bekomme ich, auch wenn es sich garantiert um ein .doc handelt den Fehler: Fehlermeldung: Das COM-Objekt des Typs \"System.__ComObject\" kann nicht in den Schnittstellentyp \"Microsoft.Office.Interop.Word.Document\" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID \"{0002096B-0000-0000-C000-000000000046}\" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)). Kann ich vielleicht irgendwie direkt aus dem COM-Object den Typen herausbekommen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Oktober 2011 Teilen Geschrieben 20. Oktober 2011 auch wenn es sich garantiert um ein .doc handelt Wenn dir QueryInterface E_NOINTERFACE zurückgibt, dann handelt es sich nicht um ein Objekt, das Microsoft.Office.Interop.Word.Document implementiert, Garantie hin oder her. Wo kommt das Objekt denn her? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maltek Geschrieben 21. Oktober 2011 Autor Teilen Geschrieben 21. Oktober 2011 Wie meinst du das genau, "wo kommt das Objekt her"? Ich poste am besten mal den entsprechenden Code: //Alle Ordner durchlaufen for (int i = 1; i < objMapiFolder.Folders.Count; i++) { //Alle Items in einem Ordner durchlaufen for (int y = 1; y < objMapiFolder.Folders[i].Items.Count; y++) { var item = objMapiFolder.Folders[i].Items[y]; //E-Mails Outlook.MailItem mail = objMapiFolder.Folders[i].Items[y] as Outlook.MailItem; if (mail != null) { ... } //Word Dateien docDocument = objMapiFolder.Folders[i].Items[y] as Word.Document; if (docDocument != null) { ... } } } objMapiFolder.Folders.Items[y] ist dann halt immer das entsprechende Objekt aus dem Ordner. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Oktober 2011 Teilen Geschrieben 21. Oktober 2011 Du wirst da kein Word.Document finden. Diese Schnittstelle repräsentiert ein gerade in Word geöffnetes Dokument. Wenn es sich um einen öffentlichen Ordner handelt, ist es vermutlich ein Outlook.PostItem. Versuch das mal, und dann versuch, ob du über dessen Properties an die eingebettete Word-Datei kommst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maltek Geschrieben 21. Oktober 2011 Autor Teilen Geschrieben 21. Oktober 2011 Besten Dank, das hilft mir schon mal sehr. Outlook.PostItem postItem = objMapiFolder.Folders[i].Items[y] as Outlook.PostItem; if(postItem != null) postItem.SaveAs("C:/export/test.doc", System.Reflection.Missing.Value); Ich schwöre, dass ich in dem Ordner eine text.doc liegen hatte und diese auch öffnen konnte (es war auch das erwartete Dokument). Aber jetzt springt er einfach nicht mehr in die If-Bedingung rein, er sieht das Objekt also plötzlich nicht mehr als postItem an Aber ok, du hast mir bis hier her schon sehr geholfen, die kleine Hürde bekomme ich vor dem Wochenende auch noch hin. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.