---------------以下為程式碼---------------------------------------------
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application")
contacts = outlook.Session.GetDefaultFolder(10)
new_group = contacts.Items.Add("IPM.DistList")
new_group.DLName = "新增的聯絡人群組"
if new_group is None:
print("聯絡人群組物件不存在")
else:
new_contact = new_group.AddMember()
new_contact.Name = "mis"
new_contact.Email1Address = "mis@gmail.com"
new_group.Save()
print("新增聯絡人成功!")
---------------以上為程式碼---------------------------------------------
我使用了以上的指令,卻報錯誤
Traceback (most recent call last):
File "D:\Python\main.py", line 17, in
new_contact = new_group.AddMember()
^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in AddMember
pywintypes.com_error: (-2147352561, '並非選擇性的參數。', None, None)
我後來換了另一種方式,將聯絡人、群組手動創建完後 再將現有聯絡人加入現有群組
---------------以下為程式碼---------------------------------------------
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application")
contacts = outlook.Session.GetDefaultFolder(10)
existing_group = contacts.Items.Item(1)
existing_contact = contacts.Items.Item(3)
existing_group.AddMembers(existing_contact)
existing_group.Save()
print("新增聯絡人成功!")
---------------以上為程式碼--------------------------------------------------
它這次沒有報錯誤,但也沒有任何改變,不知道問題出在哪裡?
有沒有人可以幫忙解答,感謝!
確認一下是要做到同步的概念嗎?
因為沒有看到刪除原本已存在的程式碼。
如果資料都依樣,那沒有資料異動是正常的呀0.0!
C# 或 VBA 就能處理的事務,竟發想用 python + pywin32 處理……你還真有毅力~
以下程式碼,閒閒參閱網路各項資訊而建組的簡單方案(所以會有些詭異的程式邏輯,但懶得測就不管了);
沒有測試過,很有可能會出現異常,你試試吧。
(有啥需要請通過基本測試後再自改。)
##
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants
myDebugShow = True ## 除錯用顯示開關;
olaOutlook = EnsureDispatch("Outlook.Application") ## Dispatch : olApplication;
#nsMAPI = olaOutlook.GetNamespace("MAPI") ## olNamespace;
if(myDebugShow): print('[Dbg] constants.olMailItem:', constants.olMailItem)
olmiTemp = olaOutlook.CreateItem(constants.olMailItem) ## olMailItem (Enum : 0);
if(myDebugShow): print('[Dbg] constants.olDistributionListItem:', constants.olDistributionListItem)
oldliGroup = olaOutlook.CreateItem(constants.olDistributionListItem) ## olDistributionListItem (Enum : 7);
##
listMail = [ ## email address list;
'user01@domain.name', \
'user02@domain.name', \
'user03@domain.name', \
] ## 也能使用名字等 Outlook 能解析收件者的字串;
##
flagErr = False
for i in listMail:
olrTemp = olmiTemp.Recipients.Add(i) ## olRecipient
if(not olrTemp.Resolve()): ## 若解析收件者字串失敗;
print('Fail:Resolve:',i) ## 解析失敗的收件者字串;
flagErr = flagErr or True
##
if (not flagErr): ## 若解析收件者字串皆成功;
print('Attempts to add recipients from listMail:')
oldliGroup.AddMembers(olmiTemp.Recipients) ## 將收件者加入群組清單;
oldliGroup.Save() ## 儲存群組清單;
else: ## 若解析收件者字串有失敗;
print('Got Errer, skip the "AddMembers()";')
##
#oldliGroup.Display() ## 顯示群組清單;
##
#olaOutlook.Application.Quit() ## 結束 Outlook 程式;
##
另,要使用工具,請先了解工具的邏輯、原理。
並不是你的邏輯沒問題就萬事通了,加油!