0

連絡先のすべてのメールアドレスを列挙する次のコードがありますが、この行の例外ポイントを除いて、列挙することはできません。

 Outlook.ContactItem oAppt = (Outlook.ContactItem)oItems;

Microsoft Outlookで連絡先のすべての電子メールアドレスを列挙できるように、誰かが私を助けてくれませんか?

namespace RetrieveContacts
{
    public class Class1
{
     public static int Main(string[] args)
    {
        try
        {
            Outlook.Application oApp = new Outlook.Application();

            Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

            Outlook.MAPIFolder oContacts = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);

            Outlook.Items oItems = oContacts.Items;

            Outlook.ContactItem oAppt = (Outlook.ContactItem)oItems;

            for (int i = 0; i <= oItems.Count; i++)
            {
            System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\EmailAddress.txt");
            file.WriteLine(oAppt.Email1Address);
            file.Close();
            }
            oNS.Logoff();

            oAppt = null;
            oItems = null;
            oContacts = null;
            oNS = null;
            oApp = null;
        }
        catch (Exception e)
        {
        System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\Exception.txt");
            file.WriteLine(e);
            file.Close();
        }
        return 0;
    }
  }
}
4

1 に答える 1

0

Outlook.ItemsOutlook のオブジェクト モデルを暗記しなければ、それは のコレクションでありContactItem、単一の に直接キャストすることはできないと思いContactItemます。その他の懸念事項:

  • ループ内でファイルを作成して書き込むため、毎回上書きされます
  • アイテムがであることを検証する必要があります。そうしContactItemないと、キャストがエラーをスローします。
  • ファイルアクセスはusingブロック内にある必要があるため、例外がスローされた場合は自動的に閉じられます
  • コレクションが 0 ベースの場合、for ループは、からに0行くCount必要があります。0Count-1

ループを次のように変更してみてください。

Outlook.Items oItems = oContacts.Items;
using(System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\EmailAddress.txt"))
{
    for (int i = 0; i < oItems.Count; i++)  // Note < instead of <=
    {
        // Will be null if oItems[i] is not a ContactItem
        Outlook.ContactItem oAppt = oItems[i] as Outlook.ContactItem;

        if(oAppt != null)
            file.WriteLine(oAppt.Email1Address);
    }
}
file.Close();
oNS.Logoff();
于 2012-05-09T02:22:26.827 に答える