質問

過去に、Outlookの連絡先からデータを抽出するためのPythonツールをいくつか作成しました。現在、Outlookの連絡先を変更しようとしています。私の変更がOutlookによって記録されていることがわかりましたが、変更は適用されません。キャッシュを更新していますが、実際のレコードは更新していないようです。

コードは簡単です。

import win32com.client
import pywintypes

o = win32com.client.Dispatch("Outlook.Application")
ns = o.GetNamespace("MAPI")
profile = ns.Folders.Item("My Profile Name")
contacts = profile.Folders.Item("Contacts")
contact = contacts.Items[43] # Grab a random contact, for this example.
print "About to overwrite ",contact.FirstName, contact.LastName
contact.categories = 'Supplier' # Override the categories

# Edit: I don't always do these last steps.
ns = None 
o = None

この時点で、詳細なアドレスカードビューに開かれているOutlookに切り替えます。

連絡先の概要を表示し(開かず)、カテゴリは変更されません(更新されませんか?)。

連絡先を開き、そのカテゴリが変更されました、時々。 (いつかはわかりませんが、キャッシュに関連しているように感じます。)変更されている場合、Outlook UIで何も変更していないため、閉じるときに変更を保存するように求められます。

Outlookを終了して再起動すると、変更はなくなります。

私は疑わしい SaveChanges 、しかし、どのオブジェクトがそれをサポートしているのかわかりません。

だから私の質問は:

  • SaveChangesを呼び出す必要がありますか?もしそうなら、それはどこにありますか?
  • 他のばかげた間違いをして、データが破棄されているのですか?
役に立ちましたか?

解決

連絡先に.Save()メソッドがあると思うので、追加する必要があります:

contact.Save()

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top