什么是自动执行涉及Outlook和Excel的Windows任务的最佳语言?

时间:2010-01-30 23:13:00

标签: excel vba outlook automation

我需要自动执行涉及以下任务的特定任务:

  • 根据一组标准从我的邮箱中提取邮件 - 来自特定用户,具有特定的主题行模式等。

  • 解析每封邮件的邮件正文并提取一些内容(邮件几乎是固定的模式)

  • 使用特定模板创建Excel工作表(前两行是常量,第三行是本周的星期五和星期五等),然后将上面提取的内容以连续的行粘贴到此工作表中。

  • 使用不同格式创建具有相同内容的Outlook电子邮件

  • 使用此邮件附加上述Excel表格。

(最后发送,但我不想自动化那部分 - 我喜欢在发送邮件之前仔细检查一下。)

现在,当我想到自动完成这项任务时,Perl的Win32 :: OLE立刻浮现在脑海中,因为我最近才了解它,并且在Perl中非常舒服。但是,我认为Visual Basic for Automation可能更适合这项任务,因为它是为这些任务创建的语言。

我的问题是,VBA是否足以抵消Perl和VB之间技能组的差异?我几年前小时候玩过VB6,但那是关于VB体验的程度。

我也愿意接受任何其他语言/平台建议,只要它们具有一定的灵活性并且不太难学。我也知道一些Python。

我查看了this以及thisthisthisthis,但它们要么不相关,要么没有任何好处答案。

3 个答案:

答案 0 :(得分:6)

免责声明:我从未使用过Perl或Python。

如果您愿意从Macros和VBA“升级”到使用.NET中已有的Visual Studio Office工具(VSTO)一段时间,您可以使用几个强大的新选项来处理Office互操作:< / p>

  1. 通过可从C#和其他.NET语言使用的PIA(主互操作程序集)公开COM API:在SO或CodeProject上提供了大量代码示例,用于执行您描述的所有操作。建议您搜索“C#Office Interop”“C#Outlook Interop”“C#Excel Interop”“C#Office Automation”。或者搜索从VB.NET到F#的其他.NET语言。

  2. 使用最新的.NET工具,您可以使用UI设计器来创建Excel或Outlook等插件。我正在使用2010年的Excel插件,它非常适合很高兴能够在设计时将WinForms控件拖放到WorkSheet上并创建事件处理程序,并以与在WinForms中工作相同的方式编辑属性。当然,2010 beta Office有一些“粗糙的边缘”,正如您所料。

  3. 微软VSTO论坛:VSTO Forum for Office 2003, 2007

    通过VSTO为Office Automation提供良好的“门户”:Getting Started (Visual Studio Tools for Office)

    Microsoft针对Visual Studio 2010测试版2的VSTO论坛:2010 beta请确保并打开名为“使用Visual Studio 2010 Beta 2资源进行Office开发”的“公告”下的下拉面板

    Microsoft Office 2010测试版论坛:Office 2010

    在Visual Studio 2010 beta 2中,使用Office 2010测试版,您只有六个与Excel互操作相关的项目类型:

    Excel 2007加载项,   Excel 2010加载项,   Excel 2007模板,   Excel 2010模板,   Excel 2007工作簿,   Excel 2010工作簿:适用于Outlook:Outlook 2007加载项,Outlook 2010加载项

    此SO帖子Beginning VSTO ?可能对您有一些价值,我建议您在“VSTO Excel”和“VSTO Outlook”上搜索此处

答案 1 :(得分:3)

我问Best “official” scripting language for Windows programmers,答案主要是PowerShell。这是我发现自动化Outlook的链接:using PowerShell for Outlook automation

$outlook = new-object -com Outlook.Application
  

查看您发送的前5封电子邮件的主题

$sentMail = $outlook.Session.GetDefaultFolder(5) # == olFolderSentMail 
$sentMail.Items | select -first 5 TaskSubject    

和Excel:PowerShell and Excel

$a = new-object -comobject excel.application
  

如何更改指定单元格的值?

$a.ActiveSheet.Range("B1").Value2 = "y"

答案 2 :(得分:0)

如何使用AutoIt?它的语法类似于VB,可以做任何事情,而且文档非常全面。此外,您可以将其编译为独立的可执行文件,以便在另一台没有AutoIt的计算机上自动执行该任务。它有一个很好的IDE环境来测试和调试自动化脚本。

希望这有帮助, 最好的祝福, 汤姆。