Outlook Interop дает разные результаты - PullRequest
1 голос
/ 12 июля 2010

Я использую Outlook-Interop для чтения некоторых событий из разных календарей и отображения их на большом экране. На моей машине все работает нормально (Outlook 2010, Win7 x64), но на компьютере клиента (Outlook2003, Win XP) программа не находит все встречи. Если я добавлю несколько флажков для отладки, инструмент найдет от 8 до 12 встреч (12 должно найти) и не всегда 6. Я понятия не имею, что происходит, поэтому, пожалуйста, помогите мне.

Вот код:

this.Appointments = new List<AppointmentItem>();

foreach (MAPIFolder folder in this.SelectedCalendars)
{
    foreach (object app in folder.Items)
    {
        if (app is AppointmentItem && ((AppointmentItem)app).Start.Date == DateTime.Now.Date)
        {
            this.Appointments.Add(((AppointmentItem)app));
        }
    }
}

this.Appointments.Sort(
    delegate(AppointmentItem App1, AppointmentItem App2)
    {
        return App1.Start.CompareTo(App2.Start);
    });

Обновление

У меня есть новая информация. Получил это исключение. Любая идея, как справиться с?

(я перевел с немецкого на английский; надеюсь, вы поймете;))

COM-объект типа "System .__ ComObject" не может быть изменен на тип интерфейса «Microsoft.Office.Interop.AppointmentItem. Эту процедуру не удалось запустить, потому что Queryinterface-Call to COM-компонент для интерфейса с IID "{00063033-0000-0000-C000-000000000046}" не удалось запустить из-за следующей ошибки: Интерфейс не поддерживается (Исключение _HRESULT: 0x80004002 (E_NOINTERFACE)).

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

Убедитесь, что вы связаны с версией Office Interops 2003 года, которая должна быть совместима напрямую.

0 голосов
/ 12 июля 2010

Это может быть итератор, который не работает для COM-объекта.

Работает ли это, если вы переписываете цикл для явного вызова GetFirst() и GetNext():

object app = folder.Items.GetFirst();
while (app != null)
{
    if (app is AppointmentItem && ((AppointmentItem)app).Start.Date == DateTime.Now.Date)
    {
        this.Appointments.Add(((AppointmentItem)app));
    }
    app = folder.Items.GetNext();
}

Вы также можете попробовать отфильтровать коллекцию Предметов по дате начала.

var items = folder.Items.Restrict("[Start] < '01/31/2009 00:00 AM' and [Start] >= '01/30/2009 00:00 AM");
...