6

現在、C# を使用して Outlook 2010 アドインを作成しています。私が望むのは、AppointmentItem から取得した Recipient オブジェクトから CompanyName プロパティを取得することです。したがって、AppointmentItem の Recipients があれば、ExchangeUser の可能性がある各 Recipient の CompanyName を調べたいと思います。

私のコードはこれです:

Recipients recipients = appointmentItem.Recipients;
foreach (Recipient rec in recipients)
{
    resolved = rec.Resolve();
    if (resolved)
    {
       ContactItem contactItem = rec.AddressEntry.GetContact();
       String companyName = contactItem.CompanyName;       
       // ...
    }

contactItem は常に null です。

このようなことを行うと、null ポインターにもなります。

ExchangeUser u = rec.AddressEntry.GetExchangeUser();
companyName = u.CompanyName;

CompanyName 情報にアクセスできません。情報が存在することは知っています。ただし、CompanyName 以外の多くの属性も NULL ポインターになるようです。

誰かが私にそれについてのヒントを教えてもらえますか?

前もって感謝します。

4

2 に答える 2

3

以下のコードで試してください。私のために働いています。

コード:

 bool resolved;
        Microsoft.Office.Interop.Outlook.Application olApplication = new Microsoft.Office.Interop.Outlook.Application();

        // get nameSpace and logon.
        Microsoft.Office.Interop.Outlook.NameSpace olNameSpace = olApplication.GetNamespace("mapi");
        olNameSpace.Logon("Outlook", "", false, true);

        // get the Calender items
        Microsoft.Office.Interop.Outlook.MAPIFolder _olCalender = olNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);

        // Get the Items (Appointments) collection from the Calendar folder.
        Microsoft.Office.Interop.Outlook.Items oItems = _olCalender.Items;



        foreach (object o in oItems)
        {

            if (o is Microsoft.Office.Interop.Outlook.AppointmentItem)
            {
                Microsoft.Office.Interop.Outlook.Recipients recipients = ((Microsoft.Office.Interop.Outlook.AppointmentItem)o).Recipients;
                foreach (Microsoft.Office.Interop.Outlook.Recipient rec in recipients)
                {
                    resolved = rec.Resolve();
                    if (resolved)
                    {
                        Microsoft.Office.Interop.Outlook.ContactItem contactItem = rec.AddressEntry.GetContact();
                        MessageBox.Show(contactItem.CompanyName);
                    }
                }

            }
        }

それがうまくいくことを願っています。

于 2012-09-22T10:47:31.973 に答える
1

I haven't tried this but it may help. It looks like CompanyName is a property of a ContactItem, so you need to convert the recipient to a ContactItem. The below code looks for the contact in the address book using the recipient's email address. From here you may be able to find the CompanyName:

Outlook.MAPIFolder fldContacts = (Outlook.MAPIFolder)OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 
for (int i =1; i <aitem.Recipients.Count+1 ; i++) 
{ 
   Outlook.Recipient r = aitem.Recipients.Item(i); 
   if (!r.Resolved) r.Resolve(); 
   if (r.Resolved) 
   { 
     Outlook.ContactItem ci = (fldContacts.Items.Find("[Email1Address] = '" + r.Address + "'") as Outlook.ContactItem);
     if (ci != null) 
     { 
       //Now you got the contact deal with it here 
     } 
    }
}
于 2012-09-19T17:43:07.067 に答える