适用于Excel和MS Office自动化的VBA和Python

产生此注释的原因是有关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比任何全新的同事都清晰明了

结论


我希望该注释对您有用,并且可以节省选择堆栈来解决他们的问题的时间。

Source: https://habr.com/ru/post/zh-CN439898/


All Articles