.NET TIPS

Outlook 2003/2007に仕事(ToDo)を追加するには?[C#、VB]

デジタルアドバンテージ 岸本 真二郎
2008/08/14

 COM相互運用の機能を利用すれば、.NETのアプリケーションからOfficeアプリケーションを操作することが可能だ。これはOfficeが提供しているCOMコンポーネントの機能を呼び出すことにより実現されている。そしてこの機能は、WordやExcelだけでなく、Outlookに対しても利用可能だ。ここではOutlookの「仕事(ToDo)」の追加をC#やVBのアプリケーションから行う例を紹介する。

参照の追加

 まずOfficeが提供するCOMコンポーネントが利用できるように、参照の追加を行う。Visual Studioでプロジェクトを新規作成したら、メニューの[プロジェクト]−[参照の追加]を選択して[参照の追加]ダイアログを開き、[COM]タブで「Microsoft Outlook 12.0 Object Library」(Outlook 2007の場合)を追加する。


[参照の追加]ダイアログ

Outlookに「仕事」を追加

 Outlookを操作するには、まずOutlookのインスタンスを作成する。次に、ログオン処理が必要になる。ログオンを行うメソッドも公開されているので、これをそのまま呼び出すのだが、その際の引数としてアカウント情報にnull(VBではNothing)を指定すると、現在Windowsにログオンしているユーザーのアカウント情報が使用される。

 ToDoの追加は、Outlookのインスタンスからタスク・アイテムを新規作成し、ここに件名や内容、期限、アラームを鳴らすかどうかなどの設定を行うことで実現できる。作成したタスク・アイテムは、それを保存することで、ToDoが登録される。

 以下のサンプル・コードでは、Outlook200Xというクラスを作成し、その中にToDoを作成するAddTaskItemメソッドを定義している。このメソッドのパラメータでは、題名と内容のみを設定するようにしているが、必要に応じて、アラームの有無、期限なども指定できる。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Runtime.InteropServices;
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Outlook;

namespace OutlookToDo
{
  class Program
  {
    static void Main( string[] args )
    {
      Outlook200X oc = new Outlook200X();
      oc.AddTaskItem( "題名3", "test"+DateTime.Now.ToString());
    }
  }

  public class Outlook200X
  {
    private Microsoft.Office.Interop.Outlook.Application oApp;
    private NameSpace oNameSpace;

    public Outlook200X()
    {
      oApp = new Microsoft.Office.Interop.Outlook.Application();
      oNameSpace = oApp.GetNamespace("MAPI");

      oNameSpace.Logon(null, null, true, true);
    }

    public void AddTaskItem( string subject, string sBody )
    {
      // タスク・アイテムの作成
      _TaskItem oTask =
          (_TaskItem)oApp.CreateItem(OlItemType.olTaskItem);

      try {
        oTask.Subject = subject; // 件名
        oTask.Body = sBody; // 本文
        oTask.ReminderSet = true; // アラーム
        oTask.ReminderTime = DateTime.Now.Add(
            new System.TimeSpan(0, 0, 2, 0, 0)); // アラームを鳴らす
        oTask.DueDate = DateTime.Now.Add(
            new System.TimeSpan(1, 0, 0, 0, 0)); // 期限

        // 保存してクローズ
        oTask.Close(OlInspectorClose.olSave);

        oNameSpace.Logoff();

      } catch(System.Exception ex) {
        Console.WriteLine(ex.Message);
      } finally {
        Marshal.ReleaseComObject(oTask);
        Marshal.ReleaseComObject(oNameSpace);
        Marshal.ReleaseComObject(oApp);
      }
    }
  }
}
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Outlook
Imports System.Runtime.InteropServices

Module Module1
  Sub Main()
    Dim oc As Outlook200X = New Outlook200X()
    oc.AddTaskItem("題名3", "test" + DateTime.Now.ToString())
  End Sub
End Module

Public Class Outlook200X
  Private oApp As Microsoft.Office.Interop.Outlook.Application
  Private oNameSpace As [NameSpace]

  Public Sub New()
    oApp = New Microsoft.Office.Interop.Outlook.Application()
    oNameSpace = oApp.GetNamespace("MAPI")
    oNameSpace.Logon(Nothing, Nothing, True, True)
  End Sub

  Public Sub AddTaskItem(ByVal subject As String, ByVal sBody As String)

    ' タスク・アイテムの作成
    Dim oTask As _TaskItem = DirectCast(oApp.CreateItem( _
      OlItemType.olTaskItem), _TaskItem)

    Try
      oTask.Subject = subject ' 件名
      oTask.Body = sBody ' 本文
      oTask.ReminderSet = True ' アラーム
      oTask.ReminderTime = DateTime.Now.Add( _
          New System.TimeSpan(0, 0, 2, 0, 0)) ' アラームを鳴らす
      oTask.DueDate = DateTime.Now.Add( _
          New System.TimeSpan(1, 0, 0, 0, 0)) ' 期限

      ' 保存してクローズ
      oTask.Close(OlInspectorClose.olSave)

      oNameSpace.Logoff()
    Catch ex As System.Exception
      Console.WriteLine(ex.Message)
    Finally
      Marshal.ReleaseComObject(oTask)
      Marshal.ReleaseComObject(oNameSpace)
      Marshal.ReleaseComObject(oApp)
    End Try
  End Sub
End Class
Outlookに「仕事」を追加するサンプル・コード(上:C#、下:VB)

 上記のコードにより追加されたToDoの内容は次のようになる。


プログラムから追加されたToDo

 以上のように、Officeアプリケーションは比較的簡単にC#やVBから操作できる。End of Article

利用可能バージョン:.NET Framework 2.0以降
カテゴリ:クラス・ライブラリ 処理対象:COMコンポーネント
使用ライブラリ:Application(Microsoft.Office.Interop.Outlook名前空間)

この記事と関連性の高い別の.NET TIPS
ExcelなしでExcelファイルを操作するには?(純正SDK編)[.NET 3.5、C#/VB]
プログラムからブラウザやメーラを起動するには?
Excelファイルにアクセスするには?[C#、VB]
WebページをMHT形式(.mhtファイル)で保存するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間