Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Typ eins Com-Object´s herausfinden

Empfohlene Antworten

Veröffentlicht

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?

  • Autor

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.

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.

  • Autor

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.