产生此注释的原因是有关Habré的文章,作者在其中描述了他如何在Python中解决从Excel文件收集和分析元数据的任务 。
本说明更详细地揭示了著名的论文: 对于特定任务,您需要选择适用于办公室自动化的最合适工具 。
VBA和Python
VBA(Visual Basic for Applications) ,事实上,是用于使Microsoft Office自动化的最流行的语言。 除了Excel以外,还可以从包装盒中获得,它可以在PowerPoint,Outlook,Access,Project和其他应用程序中使用。
如果您问一个问题:“首先选择哪种编程语言”,那么将有90%的情况提供Python 。 实际上,可以有任何其他语言,但是根据该语言的流行程度和我的经验,我将其与之进行比较。
通常,您可以通过类似的时间表来描述情况:

在初级程序员/办公室员工想要使与MS Office相关的某些东西自动化并且他有机会在语言之间进行选择的情况下,将没有详细的比较,考虑主要的杀手级功能。
如果出于各种原因没有选择,那么就没有可比较的东西了。
赞成VBA

- 与Excel和其他MS Office应用程序的对象模型完美结合 。 为大多数内部操作编写VBA代码很简单。 与VBA相比,在Python中,对Office对象模型的支持非常薄弱。
- 支持多种格式的MS Office。 外部语言的最大问题是使用不同的MS Office文件格式。 例如,xls,xlsx,xlsm文件可能需要不同的库,因为每个库只能以其自己的文件格式很好地工作。 对于VBA来说,这都是一个“ Excel文件”,总体上同样有效。
- 使用MS Exchange。 如果有必要在Exchange上提供公司邮件/日历的工作,则并非每种语言都有使用Exchange协议的常规库。 在VBA中,可以通过在宏中使用MS Outlook对象模型相对简单地解决此问题。
- 易于安装和分发。 无需在已安装的办公室中安装任何东西。 为了使同事能够使用该程序,只需给他传输带有宏的文件就足够了。 添加外接程序很容易,您可以通过它在办公室后台“安装”宏模型。
- MS Office应用程序内的交互性。 在Office程序内部,您只需放置宏启动按钮,然后(稍微复杂些)创建一个完整的单独的UI。 这还包括在Excel中编写公式以及宏会实时影响Office文档中对象的事实。
- 宏录制。 一个方便的工具,使您可以在完成的代码中记录人的行为,以供后续编辑使用。
支持Python(和其他外部编程语言)

- 不错的语法和语法糖。 简而言之,VBA不能表达和方便。 这是个人喜好的问题,但是Python对我来说更加方便。
- 丰富的图书馆生态系统。 大量可供选择的现成库,用于与外界合作。 尝试在VBA上编写与某些外部API交互的程序仍然很麻烦。 有趣的是,仅用于处理同一Python库的Office文件-坦率地说“在C中”。
- 良好的开发工具。 您可以从众多促进开发过程的程序中进行选择。 Office的标准VBA编辑器提供的功能非常差,坦率地说,与Python世界中的替代方法相比,它很不方便。 在外部编辑器中编写VBA代码,然后将其复制到办公室中进行调试也很不方便。
- 工作速度。 我没有检查单线程工作的速度,但我认为在单线程工作的情况下,Python将具有优势。 在任何情况下,数据/文件的多线程处理都是非常简单的组织,这使您可以以更高的速度讲话。
案例

以下是我自己解决或自动完成的特定任务,以及需要选择堆栈时的特定任务:VBA或Python。 对于每个任务,都会显示选定的堆栈,并给出原因说明:
- 任务: 用于检查目录中所有Excel文件中是否存在隐藏工作表的程序
- 我的选择: VBA 。 原因:使用不同的Excel文件格式简化了工作,并且没有外部交互。
- 目标:旨在允许用户将PowerPoint文件从移动设备转换为PDF以进行查看的服务
- 该服务被实现为邮件机器人,用户可以向其发送Office文件的地址,并通过邮件将包含PDF文件的响应发送给用户。
- 我的选择: VBA +用于监视的Python逻辑
- 首先,保证内部功能可以保留对PowerPoint文件真实的PDF(外部库在PowerPoint渲染中效果不佳)。
- 其次,将邮件漫游器实现为MS Outlook中的宏解决了使用公司Exchange邮件的问题。 因此,在Python中,没有可用于MS Exchange的常规库。
- 使用Python组织服务的监视和可能出现的问题的通知。
- 任务: 一个程序,用于将Powerpoint文件和“ interlinear”(扬声器文本)组合到一个打印文件中
- 我的选择: VBA 。 通过将两个文件转换为PDF并将其与Riffle Shuffle组合在一起,解决了该问题。 由于转换为PDF的质量很重要,因此使用内置的办公功能将其导出为PDF。
- 任务:给定卡片形式的工业企业数据库,需要过滤单独的html文件并将其合并为1个Excel文件,以计算多个指标。
- 我的选择: Python 。
- 为了从html卡中提取数据,用于解析html BeautifulSoup的库很有用。
- 该程序将创建Excel文件,因此我们自己可以决定在其中计算哪些分析,以及在Python的数据准备阶段进行哪些分析。
- 任务:通过机器翻译器将PowerPoint演示文稿中的所有文本翻译成另一种语言
- 我的选择: VBA 。 仔细处理PowerPoint文件内部对象中的文本非常重要。 Yandex API用于翻译,因为它是免费的(小批量下载且易于连接)。 例如,我无法在BBA中使用Bing转换器API,因为在那里我需要OAuth才能解决问题。 如果必须与Bing合作,那么可能会用Python进行服务中介。
- 任务:对于给定的股票报价器,从API中获取带有财务指标的数据(API发出根据请求生成的CSV文件),并读取多个基准进行分析
- 我的选择: Python 。 尽管API很简单(它不需要任何请求或授权的签名)并且可以将数据输出到CSV,但由于没有理由选择VBA,因此选择了Python,并且使用Python编写更加方便。
- 任务:维护说明基础,向表演者发送通知,生成打印报告
- 我在这里选择了很长时间,因为有很多选择:
- 第三方现成订单系统
- 具有某种处理程序的数据库
- 访问权限
- 电子表格
- 我的选择: VBA
- 首先,Excel本身是一个现成的工作UI。
- 其次,VBA解决了通过MS Outlook连接与公司Exchange合作的问题。
- 第三,做出此决定时要考虑到同事,Excel比任何全新的同事都清晰明了
结论
我希望该注释对您有用,并且可以节省选择堆栈来解决他们的问题的时间。