设为首页 收藏本站
查看: 2266|回复: 0

[经验分享] 使用 Outlook 任务

[复制链接]

尚未签到

发表于 2015-9-13 07:47:30 | 显示全部楼层 |阅读模式
  Outlook 确实有一项跟踪您必须要做的所有事情的内置机制;但出于某种原因,Outlook 任务从未使用过 Outlook 日历具有的这一方法。(例如,许多人自己安排约会,而不创建具有特定截止日期的任务。)人们为什么不利用 Outlook 任务呢?这个问题只有一个可能的答案:他们完全不知道编写 Outlook 任务脚本是多么容易。
  到现在为止。需要创建新任务吗?正好,这里有一个可以执行这类事情的脚本:Const olTaskItem = 3
Set objOutlook = CreateObject("Outlook.Application")
Set objTask = objOutlook.CreateItem(olTaskItem)
objTask.Subject = "Script Center Master Plan"
objTask.Body = "Final report for Script Center master plan."
objTask.ReminderSet = True
objTask.ReminderTime = #10/10/2005 12:00 PM#
objTask.DueDate = #10/11/2005 12:00 PM#
objTask.ReminderPlaySound = True
objTask.ReminderSoundFile = "C:\Windows\Media\Ding.wav"
objTask.Save


  我们告诉过您它很容易。该脚本先定义一个名为 olTaskItem 的常量,并将其值设置为 3;我们稍后将使用此常量实际创建我们的任务。创建 Outlook.Application 对象的实例,然后使用下面这行代码来创建 TaskItem 对象的实例:Set objTask = objOutlook.CreateItem(olTaskItem)


  没有在那方面做太多的设想:我们只是调用 CreateItem 方法,并传递常量 olTaskItem,以作为确保 Outlook 创建新任务的方法。
  然后,我们将使用以下几行代码来为新任务配置属性值:objTask.Subject = "Script Center Master Plan"
objTask.Body = "Final report for Script Center master plan."
objTask.DueDate = #10/11/2005 12:00 PM#
objTask.ReminderSet = True
objTask.ReminderTime = #10/10/2005 12:00 PM#
objTask.ReminderPlaySound = True
objTask.ReminderSoundFile = "C:\Windows\Media\Ding.wav"


  您不会很难理解这些属性的作用;我们主要是要创建一个名为 Script Center Master Plan 的任务,该任务需要在 2005 年 10 月 11 日中午之前完成。我们还为此任务设置了提醒;我们将正好提前 24 小时(2005 年 10 月 10 日中午)获得一个提醒,并伴有 Ding.wav 的悦耳声音。总而言之,相当简单。
  注意。需要补充说明的是,这些属性并不是可以为任务配置的仅有属性。有关完整列表,请参阅 MSDN 上的 Microsoft Outlook VBA 语言参考
  这将在内存中给出一个新任务。要实际保存此任务并将其添加到 Outlook 任务中,需要调用 Save 方法:objTask.Save


  非常容易。
  但是,有些人看起来有些不解;毕竟,我们如何知道该任务已实际添加到了 Outlook 任务中?那么,我们可以始终运行一个如下的脚本,该脚本将返回包括所有 Outlook 任务的列表:Const olFolderTasks = 13
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
Set colTasks = objFolder.Items
For Each objTask In colTasks
Wscript.Echo "Subject: " & objTask.Subject
Wscript.Echo "Date due: " & objTask.DueDate
Wscript.Echo "Percent complete: " & objTask.PercentComplete
Select Case objTask.Status
Case 0
Wscript.Echo "Status: Not started."
Case 1
Wscript.Echo "Status: In progress."
Case 2
Wscript.Echo "Status: Complete."
Case 3
Wscript.Echo "Status: Waiting."
Case 4
Wscript.Echo "Status: Deferred."
End Select
Select Case objTask.Importance
Case 0
Wscript.Echo "Importance: Low"
Case 1
Wscript.Echo "Importance: Normal"
Case 2
Wscript.Echo "Importance: High"
End Select
Wscript.Echo "Last modified: " & objTask.LastModificationTime
Next


  另一个脚本非常简单,几乎不需要对其进行解释。此脚本先定义常量 olFolderTasks,并将其值设置为 13;我们将使用此常量来告诉 Outlook 从哪个文件夹中检索信息。创建 Outlook.Application 对象的实例,然后使用 GetNamespace 方法连接到 MAPI 命名空间。(如我们在以前专栏中所述,这是可连接的唯一命名空间。不过,您的脚本中仍必须包含此行代码。)为了连接到 Tasks 文件夹,我们调用 GetDefaultFolder 方法,并传递常量,告诉 Outlook 要访问的文件夹:Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)


  完成连接后,仅使用一行代码即可检索 Tasks 文件夹中找到的所有项的集合:Set colTasks = objFolder.Items


  在其中,我们设置一个 For Each 循环,完全遍历该集合,从而回显属性(例如 SubjectDateDuePercentComplete)的值。您可能注意到了,我们未检索属性值 Body。这是因为检索 Body 属性会触发 Outlook 安全警报,将迫使我们对赋予脚本访问任务权限的消息框进行响应。忽略 Body 属性使我们可以避开安全警报,从而以无人参与方式运行脚本。
  您可能还注意到了,在处理 StatusImportance 时,我们使用了 Select Case 语句。这是因为这两个属性都将值存储为整数;以 Status 为例,0 表示尚未启动任务,1 表示任务正在进行中等等。我们将不回显这些看起来毫无意义的整数值,而是使用 Select Case 分析值并返回一条相应的消息。例如,如果 Status 等于 2,将回显任务已经完成的事实:Case 2
Wscript.Echo "Status: Complete."


  哈,很酷吧?
  还可以使用筛选器来限制返回任务的类型;例如,您可能只希望返回活动任务(即尚未完成的任务)。以下正是可以执行此类事情的示例脚本:Const olFolderTasks = 13
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
Set colItems = objFolder.Items
strFilter = "[Complete] = FALSE"
Set colTasks = colItems.Restrict(strFilter)
For Each objTask In colTasks
Wscript.Echo "Subject: " & objTask.Subject
Wscript.Echo "Date due: " & objTask.DueDate
Wscript.Echo "Percent complete: " & objTask.PercentComplete
Select Case objTask.Status
Case 0
Wscript.Echo "Status: Not started."
Case 1
Wscript.Echo "Status: In progress."
Case 2
Wscript.Echo "Status: Complete."
Case 3
Wscript.Echo "Status: Waiting."
Case 4
Wscript.Echo "Status: Deferred."
End Select
Select Case objTask.Importance
Case 0
Wscript.Echo "Importance: Low"
Case 1
Wscript.Echo "Importance: Normal"
Case 2
Wscript.Echo "Importance: High"
End Select
Wscript.Echo "Last modified: " & objTask.LastModificationTime
Next


  今天,我们不详细讨论筛选器;有关详细信息,请参阅以前的某个专栏中关于 Microsoft Outlook 的信息。不过,要指出的是,设置筛选器只需要两行代码,一行用于指定筛选器(在此例中,我们只对 Complete 属性等于 False 的任务感兴趣),另一行用于根据特定条件检索项的新集合:strFilter = "[Complete] = FALSE"
Set colTasks = colItems.Restrict(strFilter)


  然后,在 For Each 循环中遍历此新的、筛选过的集合,而非包含所有任务的原始集合。
  当然,好戏还在后头。对于任务列表中确实不需要执行的内容,该怎么处理呢?只需删除该任务即可:Const olFolderTasks = 13
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
Set colItems = objFolder.Items
strFilter = "[Subject] = 'Script Center Master Plan'"
Set colTasks = colItems.Restrict(strFilter)
For Each objTask In colTasks
objTask.Delete
Next


  正如您所看到的,此脚本与前面的脚本类似,后者将返回的数据限定为已完成的任务。在此例中,我们设置了一个筛选器,只返回主题为 Script Center Master Plan 的任务:strFilter = "[Subject] = 'Script Center Master Plan'"
Set colTasks = colItems.Restrict(strFilter)


  对于返回集合中的每个任务(假定任务主题是唯一的,尽管不一定非要如此),我们都将调用 Delete 方法,以从任务列表中删除该项:objTask.Delete

  现在,您不必担心 Script Center Master Plan。您知道他们的意思是指什么:如果不在 Outlook 中,就真的不存在。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-112813-1-1.html 上篇帖子: outlook express 发不出邮件问题 下篇帖子: 一个Outlook宏写的小程序,献给象我一样粗心大意的人
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表