質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

5876閲覧

PythonでOutlookの「共有の予定表」に予定を作成したい

Yubari_M

総合スコア1

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/03/22 23:40

前提

複数のチームメンバーの出勤予定をOutlookの「共有の予定表」で確認できるようにしたい.
Outlookで「共有の予定表」を作成し(所有者は私),
チームメンバーにはアイテムを書き込み可能なアクセス権を付与した.

実現したいこと

①特定のフォーマットに出勤予定(出張,外出,等)を入力する
②入力内容を取り込む
③②の内容をOutlookの「共有の予定表」に予定として作成する
上記の②と③をPythonで実施したい

発生している問題・エラーメッセージ

実現したいことの①②は達成済みです.
③のPythonで「共有の予定表」に予定を作成することができません.
エラーは発生していません

該当のソースコード

Python

1import win32com.client 2 3outlook = win32com.client.Dispatch("Outlook.Application") 4schedule = outlook.CreateItem(1) #0:メール,1:予定(会議通知) 5schedule.Start = '2022-3-14 20:00' # yyyy-MM-dd hh:mm 6schedule.Subject = 'test' #件名 7schedule.Body = 'this is test' #本文 8schedule.Duration = 60 #会議時間(min) 9schedule.Location = '事務所' #場所 10schedule.Send()

試したこと

上記スクリプトで私の所有する「個人用の予定表」に予定を作成できることについて確認済みです.
また,次のスクリプトで予定(会議通知)に宛先を追加できるようですが,
予定表は私の所有する「個人用の予定表」に作成されます.

schedule.Recipients.Add('XXXXXX@YYYYYY') #参加者

「共有の予定表」に予定を作成する手法として,
次のことを考えましたが,
どちらも該当する関数を見付けられず,
解決には至っておりません.
・作成先の予定表を指定して予定を作成する
・入力先の予定表を切り替える

補足情報(FW/ツールのバージョンなど)

Microsoftの提供する次の情報に答えがありそうだと思ったのですが,
解読できませんでした.
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.olitemtype
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.namespace.createsharingitem

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「共有の予定表」はどのメールボックスにあるのでしょうか?
あなた自身のメールボックスの予定表のサブフォルダーとして「共有の予定表」があるという場合、以下のような手順で「共有の予定表」に予定を作成することが可能です。

Python

1outlook = win32com.client.Dispatch("Outlook.Application") 2calendar = outlook.Session.GetDefaultFolder(9) # 9 = olFolderCalendar (予定表) 3sharedCal = calendar.Folders("共有の予定表") 4schedule = sharedCal.Items.Add(1) # 1 = olAppointmentItem (予定アイテム) 5schedule.Start = '2022-3-14 20:00' # yyyy-MM-dd hh:mm 6schedule.Subject = 'test' #件名 7schedule.Body = 'this is test' #本文 8schedule.Duration = 60 #会議時間(min) 9schedule.Location = '事務所' #場所 10schedule.Save()

投稿2022/03/24 06:14

millefeuille

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yubari_M

2022/03/24 12:54

> millefeuilleさん ご回答ありがとうございます. 「共有の予定表」は私のメールボックスの予定表のサブフォルダーとして存在します. 前提として書くべきことで申し訳ありません. さて,ご回答のスクリプトを使ってみたところ, 無事私の「共有の予定表」に予定を作成することができましたので, ご報告いたします. また, > あなた自身のメールボックスの予定表のサブフォルダーとして の記述が気になりまして, チームメンバーの所有する「共有の予定表」(私にとって共有された予定表)に, 同様のスクリプトで予定の作成を試みたところ無事作成することができました (所有している云々ではなく自分のフォルダー内に表示されていることが条件ですから当然ですね). このスクリプトの実装により目標を無事達成できる見込みです. お礼を申し上げます. 追伸 NameSpace(Session).GetDefaultFolderで予定表オブジェクト(フォルダー)を取得し, .Foldersでカレンダーを取得するという手法を全く思い付きませんでした. 勉強させていただいたことに改めてお礼を申し上げます.
Yubari_M

2022/03/28 23:54 編集

新しく問題が発生しました. ※もしご質問の場所が不適でしたら適正な場所をご指摘いただければ幸いです. チームメンバーの所有する「Test」という「共有の予定表」に予定を作成しようとしたところ, 上記のスクリプトではエラーが発生しました. 予定表「Test」はアカウント「AAAAAA@BBBBBB」が所有しており, 私のアカウントにアクセス権を付与済みです. 現在試行錯誤を繰り返しておりますがエラーを解決できません. 今回検証したスクリプトは次の通りです. --- Outlook = win32com.client.Dispatch('Outlook.Application') Address = 'AAAAAA@BBBBBB' Owner = Outlook.Session.CreateRecipient(Address) Calendar = Outlook.Session.GetSharedDefaultFolder(Owner, 9) sharedCal = Calendar.Folders('Test') #ココでエラー発生 Schedule = Calendar.Items.Add(1) --- 発生するエラーは次の通りです. 予定表「Test」が見付からないというエラーと認識しております. --- sharedCal = Calendar.Folders('Test') pywintypes.com_error: (-2147352567, '例外が発生しました。', (4096, 'Microsoft Outlook', '実行しようとした操作が失敗しました。オブジェクトが見つかりませんでした。', None, 0, -2147221233), None) --- Outlookのアクセス権も関係している可能性も懸念してております. 解決方法をご教示いただきたくお願いします. 補足 先回のコメントで > チームメンバーの所有する「共有の予定表」(私にとって共有された予定表)に, > 同様のスクリプトで予定の作成を試みたところ無事作成することができました と記入しましたが, 検証方法が間違っていたようです. ここで訂正・お詫びいたします.
millefeuille

2022/04/08 01:23

GetSharedDefaultFolder はほかのユーザーの既定の予定表を取得するという特殊なメソッドであるため、既定の予定表のサブフォルダーなどにはアクセスできません。 ほかのユーザーの既定のフォルダー以外のフォルダーにアクセスするには、そのユーザーのメールボックスへのログオン権限が必要となります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問