@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Outlookアドレス帳の取得(C#)

1
投稿者投稿内容
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2005-06-30 11:29
いつも、参考にしています。

http://support.microsoft.com/default.aspx?scid=kb;ja;313799
のサイトを参考にして、Outlookアドレス帳の取得をC#で作成したところ、
コンパイル時に、「Outlook.AddressLitsにItemの定義がありません」
となります。

Outlook.Application oApp = new Outlook.Application();
//Get the MAPI namespace.
Outlook.NameSpace oNS = oApp.Session;
//Get the AddressLists collection.
Outlook.AddressLists oALs = oNS.AddressLists;
Console.WriteLine(oALs.Count); <-- このアドレス数は取得できました。
//Loop through the AddressLists collection.
Outlook.AddressList oAL;
for(int i=1;i<=oALs.Count;i++){
oAL = oALs.Item[i]; <-- ここでコンパイル時にエラーになります。
Console.WriteLine(oAL.Name);
}

このソースをVB.NETでは
For i = 1 To oALs.Count
oAL = oALs.Item(i)
Console.WriteLine(oAL.Name)
Next
として、アドレス一覧が表示されました。

C#ではこのOutlook.AddressListsは使用できないのでしょうか。

宜しくお願いします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-06-30 11:54
恐らく、Outlook.AddressListsクラスのItemプロパティは、
デフォルトプロパティ、つまりC#におけるインデクサとして実装されています。
Outlook.AddressLists[i]と言う風にすればアクセスできるでしょう。

Itemと言う名前でコレクションの要素にアクセスする場合は、C#ではまず間違いなくインデクサです。
逆に、C#でインデクサを定義した場合、他の言語からは(デフォルトでは)Itemプロパティでアクセスすることになります。
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2005-06-30 11:55
おさがわせいたしました。
自己回答です。

foreach( Outlook.AddressList oAL1 in oALs){
Console.WriteLine(oAL1.Name);
}
とすることで、アドレス一覧を取得できました。

でも、oALs.Item[i]として、指定できないのがわかりません。
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2005-06-30 12:02
Hongliangさん、お答え有難うございます。

C#でのインデクサのことを失念しておりました。

for(int i=1;i<=oALs.Count;i++){
oAL = oALs[i];
Console.WriteLine(oAL.Name);
}

とすることで、取得できました。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-06-30 13:07
引用:

oAL = oALs.Item[i]; <-- ここでコンパイル時にエラーになります。



このコンパイルエラーのメッセージは「メソッドに[]は指定できません」ではないですか?
SharpDevelop使って試してみましたら、
コード:
            Outlook._Application oApp = new Outlook.Application();
            Outlook.NameSpace oNs = oApp.Session;
            Outlook.AddressLists oAls = oNs.AddressLists;
            
            for (int i = 1;i <= oAls.Count;i++)
            {
                Outlook.AddressList oAl = oAls.Item(i);
                Console.WriteLine(oAl.Name);
            }




こんな感じでOKでした。
#VS使っていればコード支援機能でメソッドやプロパティの判別は付きますよね。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2005-06-30 16:29
Jubeiさん、こんにちは。返答ありがとうございます。

oAl = oAls.Item(i);では
「'Outlook.AddressLists' に 'Item' の定義がありません。」になります。

SharpDevelopについては今回、初めて知りました。


----- SharpDevelopについて -----------
http://sharpdevelop-jp.sourceforge.jp/
SharpDevelopはic#codeで開発され続けている.NET Framework SDK Version 1.1上で動作するC#で書かれた最先端の.NET開発環境です。SharpDevelop-jpはそのSharpDevelopを日本語環境で利用しやすくするために、日本語リソースの管理や情報提供を行っています。
1

スキルアップ/キャリアアップ(JOB@IT)