2011-08-17 118 views
4

我试图自动创建一堆Outlook规则。我正在使用Python 2.7,win32com和Outlook 2007.为此,我必须创建一个新的Rule对象并为其移动操作指定一个文件夹。但是,我无法成功设置Folder属性 - 尽管我给出了正确类型的对象,但它仍然保持为无。使用win32com设置属性

import win32com.client 
from win32com.client import constants as const 

o = win32com.client.gencache.EnsureDispatch("Outlook.Application") 
rules = o.Session.DefaultStore.GetRules() 

rule = rules.Create("Python rule test", const.olRuleReceive) 
condition = rule.Conditions.MessageHeader 
condition.Text = ('Foo', 'Bar') 
condition.Enabled = True 

root_folder = o.GetNamespace('MAPI').Folders.Item(1) 
foo_folder = root_folder.Folders['Notifications'].Folders['Foo'] 

move = rule.Actions.MoveToFolder 
print foo_folder 
print move.Folder 
move.Folder = foo_folder 
print move.Folder 

# move.Enabled = True 
# rules.Save() 

打印

 
<win32com.gen_py.Microsoft Outlook 12.0 Object Library.MAPIFolder instance at 0x51634584> 
None 
None 

我看在非动态模式下使用win32com当由makepy生成的代码。 _MoveOrCopyRuleAction类别的字典中有'Folder'的条目,但除此之外,我很难过。

+0

我有这个IronPython的工作。我需要使用:Outlook._MoveOrCopyRuleAction.Folder.SetValue(rule.Actions.MoveToFolder,文件夹)。尽管如此,我仍然想看到一个win32com答案。 – PAG

+0

运行上述命令时,我得到的错误对象没有属性'DefaultStore'。我是否缺少规则存储?什么是一个?此外,win32com中的SetFolder()方法如何处理IronPython使用的对象? –

回答

2

尝试SetFolder()

我想从你的代码尝试SetFolder的粗略阅读(移动,foo_folder)

win32com做一些惊人的魔力,但有时COM对象只是打败它。 当窗体集{名}获取{名}

看到创建的对象不能按照Python的惯例,场面一个setter和getter背后:http://permalink.gmane.org/gmane.comp.python.windows/3231 NB - 马克·哈蒙兹如何调试COM是无价的 - 这东西只是隐藏在usegroups ...

+0

关于哪个对象的SetFolder? 'print move.SetFolder'引发一个AttributeError – PAG