我目前正在使用C#编写Outlook 2010 AddIn。我想要的是从我从AppointmentItem拉出的Recipient对象中获取CompanyName属性。因此,拥有AppointmentItem的收件人我想找出每个收件人的CompanyName,它可能是一个ExchangeUser。
我的代码是:
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。
做这样的事情也会导致空指针。
ExchangeUser u = rec.AddressEntry.GetExchangeUser();
companyName = u.CompanyName;
我根本无法获取CompanyName信息。我知道这些信息确实存在。但是,除了CompanyName之外,很多其他属性似乎也会产生NULL指针。
有人可以给我一个暗示吗?
提前致谢。
答案 0 :(得分:3)
尝试使用以下代码。为我工作。
<强> CODE:强>
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);
}
}
}
}
希望它应该有用。
答案 1 :(得分:1)
我没有尝试过,但它可能有所帮助。看起来CompanyName是ContactItem的属性,因此您需要将收件人转换为ContactItem。以下代码使用收件人的电子邮件地址查找地址簿中的联系人。从这里您可以找到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
}
}
}