iT邦幫忙

0

利用Python 建立Outlook 聯絡人群組

  • 分享至 

  • xImage

---------------以下為程式碼---------------------------------------------
import win32com.client

建立 Outlook 物件

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 物件

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("新增聯絡人成功!")

---------------以上為程式碼--------------------------------------------------

它這次沒有報錯誤,但也沒有任何改變,不知道問題出在哪裡?
有沒有人可以幫忙解答,感謝!

Peter iT邦新手 4 級 ‧ 2023-01-03 14:13:47 檢舉
如果是我的話,可能會先從第一個error去嘗試,而不是直接換一種寫法,因為new_contact = new_group.AddMember()報錯看起來是因為沒給參數,然後是第二種作法你有先檢查過result嗎? 有沒有可能取資料的時候就是空的了

另外建議你的文章格式稍微整理一下,該註解的用註解,該標題的用標題,code之間間隔太大其實有點難閱讀
s82910g iT邦新手 5 級 ‧ 2023-01-03 15:01:46 檢舉
那這個參數要給什麼比較好
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
雷峰
iT邦研究生 1 級 ‧ 2023-01-03 14:02:09

確認一下是要做到同步的概念嗎?
因為沒有看到刪除原本已存在的程式碼。
如果資料都依樣,那沒有資料異動是正常的呀0.0!

s82910g iT邦新手 5 級 ‧ 2023-01-03 15:02:35 檢舉

同步概念是指什麼?
我兩段程式碼 是分開執行的

雷峰 iT邦研究生 1 級 ‧ 2023-01-04 10:54:22 檢舉

同步=>舊有資料刪除,拉取最新資料取代

s82910g iT邦新手 5 級 ‧ 2023-01-04 12:03:04 檢舉

要刪除哪個舊有資料 我看我操作的邏輯沒有錯

0
re.Zero
iT邦研究生 5 級 ‧ 2023-01-04 23:29:25

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 程式;
## 

另,要使用工具,請先了解工具的邏輯、原理。
並不是你的邏輯沒問題就萬事通了,加油!

我要發表回答

立即登入回答