自动化涉及Outlook和Excel的Windows任务,最好的编程语言是什么?

4
我需要自动化一个特定的任务,其中包括:
  • 根据一组标准从我的邮箱中获取邮件 - 来自特定用户,具有特定主题行的模式等。

  • 解析每个电子邮件的邮件正文并提取一些内容(邮件几乎具有固定的模式)

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

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

  • 将上述Excel表格附加到此邮件中。

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

现在,当我考虑自动化这个任务时,Perl的Win32 :: OLE立即浮现在脑海中,因为我最近学习了它,并且非常熟悉Perl。 但是,我认为Visual Basic for Automation可能更适合此任务,因为它是专为此类任务创建的语言。

我的问题是,VBA是否足够好以抵消我在Perl和VB之间的技能差异? 我小时候玩过VB6,但那就是我VB经验的全部。

我也可以接受任何其他语言/平台建议,只要它们允许一定的灵活性并且不太难学习。 我还了解一些Python。

我查看了这个以及这个这个这个这个,但它们要么不相关,要么没有好的答案。


VBA是这个的一个不错选择 - 而且相对来说比较简单。你是在寻找示例代码还是只是想知道要使用哪种语言? - Todd Main
3个回答

6
免责声明:我从未与Perl或Python合作过。
如果您愿意“跨越”宏和VBA,开始使用Visual Studio Office工具(VSTO),这些工具已经在.NET中可用了一段时间,您就有了几个强大的新选项来处理Office互操作:
1. 使用COM API,通过PIA(主要Interop Assembly)暴露出来的API可以从C#和其他.NET语言中使用:在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控件拖放到工作表上并创建事件处理程序,以及在设计时编辑属性,感觉相当愉悦。当然,2010beta Office存在一些“粗糙的边缘”,正如您所期望的那样。

微软的VSTO论坛:Office 2003, 2007 VSTO论坛

VSTO是实现Office自动化很好的门户网站:快速入门(Visual Studio Tools for Office)

微软的VSTO论坛适用于Visual Studio 2010 beta 2:2010 beta请确保在“公告”下拉菜单中打开名为“使用Visual Studio 2010 Beta 2资源进行Office开发”的面板。

微软的Office 2010 beta论坛:Office 2010

在Visual Studio 2010 beta 2中,使用Office 2010 beta,你不仅有六种与Excel交互相关的项目类型:

Excel 2007 加载项, Excel 2010 加载项, Excel 2007 模板, Excel 2010 模板, Excel 2007 工作簿, Excel 2010 工作簿:针对 Outlook:Outlook 2007 加载项,Outlook 2010 加载项

这个 SO 主题 Beginning VSTO ? 可能对您有价值,我建议您在 SO 上搜索“VSTO Excel”和“VSTO Outlook”


VSTO总是很吸引人,但是购买专业版的$$$可能会成为采用的巨大障碍。我很想在工作中尝试使用VSTO而不是VBA,但是我的雇主绝不会为购买Visual Studio Professional支付现金。 - Ben McCormack

3

我询问了Windows程序员最好的“官方”脚本语言,大多数答案是PowerShell。这里是一个我找到的自动化Outlook的链接:使用PowerShell进行Outlook自动化

$outlook = new-object -com Outlook.Application

请查看您发送的前5封电子邮件的主题。
$sentMail = $outlook.Session.GetDefaultFolder(5) # == olFolderSentMail 
$sentMail.Items | select -first 5 TaskSubject    

还有Excel:PowerShell和Excel

$a = new-object -comobject excel.application

如何更改指定单元格的值?
$a.ActiveSheet.Range("B1").Value2 = "y"

+1 - 你已经引起了我对深入研究PowerShell的兴趣。 - Russ Cam
我也是!我会检查一下我的办公室是否有PowerShell,如果有的话,这将是我走的路。我只是喜欢命令行操作。 :) - Sundar R
有没有一种方法可以从这些电子邮件主题中提取特定的数字或字符串?例如,假设我有 10 封带有电话号码的电子邮件,PowerShell 是否可以帮助我仅提取电话号码? - Caffeinated

0

使用 AutoIt 如何?它具有类似 VB 的语法,可以完成几乎所有任务,并且文档相当详尽。此外,您可以将其编译为独立可执行文件,在没有 AutoIt 的其他计算机上自动化任务。而且,它还有一个漂亮的 IDE 环境,可用于测试和调试自动化脚本。

希望这能帮到你, 此致, Tom 敬上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接