COM自动化使用电脑程序

这篇具有很好参考价值的文章主要介绍了COM自动化使用电脑程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Python有许多本地创建通用Microsoft Office文件类型的选项,包括Excel、Word和PowerPoint。然而,在某些情况下,使用纯python方法解决问题可能太困难了。幸运的是,python有一个名为pywin32的“python for Windows Extensions”包,它允许我们轻松地访问Windows的组件对象模型(COM)并通过python控制微软的应用程序。本文将介绍这种类型的自动化的一些基本用例,以及如何使用一些有用的脚本启动和运行。


一、COM是什么?

在微软网站上,组件对象模型(COM)是:
一个***平台独立的、分布式的、面向对象***的系统,用于创建可以交互的二进制软件组件。 COM是Microsoft的OLE(复合文档)和ActiveX(支持internet的组件)技术的基础技术。 COM对象可以用各种编程语言创建。
这项技术允许我们从另一个程序控制Windows应用程序。 本博客的许多读者可能都见过或使用过VBA来实现某种程度的Excel任务自动化。 COM是支持VBA的基础技术。
pywin32
pywin32包已经存在很长时间了。事实上,关于这个话题的书是由马克·哈蒙德和安迪·罗宾逊在2000年出版的。Pywin32基本上是python的一个非常薄的包装器,它允许我们与COM对象交互,并使用python自动化Windows应用程序。这种方法的强大之处在于,你几乎可以做任何微软应用程序通过python可以做的事情。缺点是你必须在Windows系统上运行。

二、使用步骤

所有这些应用程序都以类似的导入和流程启动应用程序。下面是一个打开Excel的简短例子。

1.打开EXCEL

代码如下(示例):

mport win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')

excel.Visible = True
_ = input("Press ENTER to quit:")

excel.Application.Quit()


从命令行运行该命令后,应该会看到Excel打开。 当您按下ENTER时,应用程序将关闭。 在我们真正使它成为一个更有用的应用程序之前,有几个关键的概念需要了解。

第一步是导入win32客户端。 我使用了将其作为win32导入的约定,以使实际的分派代码更短一些。

这段代码的神奇之处在于使用EnsureDispatch启动Excel。 在本例中,我使用gencache。 确保调度创建一个静态代理。 如果您想了解更多关于静态代理和动态代理的细节,我建议您阅读这篇文章。 对于本文所包含的示例类型,我很幸运地使用了这种方法,但是说实话——我还没有广泛地试验过各种分派方法。

现在,excel对象已经启动,我们需要通过设置excel显式地使其可见。 可见= True

win32代码是相当聪明的,并将关闭excel一旦程序完成运行。 这意味着,如果我们让代码自己运行,您可能不会看到Excel。 我包含了虚拟提示,以便在用户按下ENTER之前,Excel在屏幕上保持可见。

我包括了excel.Application.Quit()的最后一行,就像一条腰带和吊带一样。 严格地说,win32应该在程序完成时关闭Excel,但我决定包括Excel . application . quit()来演示如何强制关闭应用程序。

这是使用COM的最基本的方法。 我们可以用许多更有用的方式来扩展它。 本文的其余部分将介绍一些可能对您自己的需求有用的示例。

2.在Excel中打开文件

在我的日常工作中,我经常使用熊猫来分析和处理数据,然后将结果输出到Excel中。该过程的下一步是打开Excel并查看结果。在本例中,我们可以自动化文件打开过程,这比试图导航到正确的目录并打开文件更简单。
下面是完整的例子

import win32com.client as win32
import pandas as pd
from pathlib import Path

# Read in the remote data file
df = pd.read_csv("https://github.com/chris1610/pbpython/blob/master/data/sample-sales-tax.csv?raw=True")

# Define the full path for the output file
out_file = Path.cwd() / "tax_summary.xlsx"

# Do some summary calcs
# In the real world, this would likely be much more involved
df_summary = df.groupby('category')['ext price', 'Tax amount'].sum()

# Save the file as Excel
df_summary.to_excel(out_file)

# Open up Excel and make it visible
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True

# Open up the file
excel.Workbooks.Open(out_file)

# Wait before closing it
_ = input("Press enter to close Excel")
excel.Application.Quit()

COM自动化使用电脑程序

这个简单的示例扩展了前面的示例,展示了如何使用Workbooks对象打开文件。

将Excel文件附加到Outlook中
COM有帮助的另一个简单场景是,当您想要将文件附加到电子邮件并发送到分发列表时。 这个例子展示了如何做一些数据操作,打开Outlook电子邮件,附加一个文件,并在发送之前让它打开以接收其他文本。

import win32com.client as win32
import pandas as pd
from pathlib import Path
from datetime import date


to_email = """
Lincoln, Abraham <honest_abe@example.com>; chris@example.com
"""

cc_email = """
Franklin, Benjamin <benny@example.com>
"""

# Read in the remote data file
df = pd.read_csv("https://github.com/chris1610/pbpython/blob/master/data/sample-sales-tax.csv?raw=True")

# Define the full path for the output file
out_file = Path.cwd() / "tax_summary.xlsx"

# Do some summary calcs
# In the real world, this would likely be much more involved
df_summary = df.groupby('category')['ext price', 'Tax amount'].sum()

# Save the file as Excel
df_summary.to_excel(out_file)

# Open up an outlook email
outlook = win32.gencache.EnsureDispatch('Outlook.Application')
new_mail = outlook.CreateItem(0)

# Label the subject
new_mail.Subject = "{:%m/%d} Report Update".format(date.today())

# Add the to and cc list
new_mail.To = to_email
new_mail.CC = cc_email

# Attach the file
attachment1 = out_file

# The file needs to be a string not a path object
new_mail.Attachments.Add(Source=str(attachment1))

# Display the email
new_mail.Display(True)

这个例子稍微复杂一些,但是基本概念是相同的。我们需要创建对象(本例中为Outlook)并创建一个新的电子邮件。使用COM的一个挑战性方面是没有一个非常一致的API。创建一个像这样的电子邮件并不直观:new_mail = outlook.CreateItem(0)它通常需要一些搜索来找出特定问题的确切API。谷歌和stackoverflow是你的朋友。
创建电子邮件对象后,您可以添加收件人和抄送列表,以及附加文件。当一切都说完了,一切都完成了,它看起来是这样的:
COM自动化使用电脑程序


总结

倾向于在我的日常数据分析中尽可能地坚持使用python。然而,重要的是要知道其他技术何时可以简化过程或使结果产生更大的影响。微软的COM技术是一项成熟的技术,可以通过python有效地使用它来完成那些很难用其他方法完成的任务。希望这篇文章已经为您提供了一些关于如何将这种技术合并到您自己的工作流程中的想法。如果您有任何需要使用pywin32的任务,请在评论中告诉我们。文章来源地址https://www.toymoban.com/news/detail-466983.html

到了这里,关于COM自动化使用电脑程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DevOps系列文章之 GitlabCICD自动化部署SpringBoot项目

    本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包。 准备三台 CentOS7服务器,分别部署以下服务: 序号 系统 IP 服务 1 CentOS7 192.168.56.10 Gitlab 2 CentOS7 192.168.56.11 Runner (安装Docker) 3 CentOS7 192.168.56.12 SpringBoot 项目 jar 包(安装jdk、maven等) 上述服务也可以只用一台CentOS

    2024年02月13日
    浏览(42)
  • 一篇文章带你入门Appium自动化测试

    appium是一款移动自动化测试工具,经常被用于实现UI自动化测试,其可支持安卓和IOS两大平台,还支持多种编程,因而得到了广泛的应用。此处便是立足于安卓平台,借助appium工具,使用python语言实现简单的自动化测试。 Native App:原生应用(特定移动设备或平台开发的应用程

    2024年02月05日
    浏览(44)
  • 使用JFLASH实现文件程序自动化合并及下载功能

    主要总结下使用 SEGGER 工具集的 JFLASH 软件实现 hex/bin 文件合并以及程序的自动下载使用方法。 起因是最近使用到LVGL字库文件的制作,每次都要将分散的bin文件按既定分配的偏移作合并处理,刚开始使用的是二进制文件合并工具,文件少的时候还行,但是文件一多,一个个的添

    2024年01月21日
    浏览(44)
  • DevOps系列文章之 自动化测试大全(单测和集成测试)

    核心目标: 主要是功能测试和覆盖率测试 业界常用主流工具 GoogleTest GoogleTest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++单元测试框架,由google公司发布,为在不同平台上为编写C++测试而开发的。它提供了丰富的断言、致命和非致命判断、参数化、”

    2024年02月14日
    浏览(43)
  • 使用 appium 进行微信小程序的自动化测试

    目录 前言: 微信小程序结构 自动化用例的调整 示例代码 后记 微信小程序是一种流行的移动应用程序,它在移动设备上提供了丰富的功能和用户体验。为了确保微信小程序的质量和稳定性,自动化测试是必不可少的一环。Appium是一个强大的自动化测试工具,可以用于测试微

    2024年02月17日
    浏览(62)
  • K8S系列文章之 自动化运维利器 Fabric

    Fabric 主要用在应用部署与系统管理等任务的自动化,简单轻量级,提供有丰富的 SSH 扩展接口。在 Fabric 1.x 版本中,它混杂了本地及远程两类功能;但自 Fabric 2.x 版本起,它分离出了独立的 Invoke 库,来处理本地的自动化任务,而 Fabric 则聚焦于远程与网络层面的任务。 为了

    2024年02月14日
    浏览(64)
  • K8S系列文章之 离线安装自动化工具Ansible

    参考 文档 离线安装 Ansible - DevOps - dbaselife 一、Ansible简介 Ansible是一款开源的IT配置管理工具,常被IT界的小伙伴们用于自动化的场景,多用在服务部署、配置管理方面。配置文件采用最常见的yaml格式,学习起来也是比较容易,Ansible并不需要也没有agent,只有一个控制端。该

    2024年02月14日
    浏览(50)
  • K8S系列文章之 自动化运维利器 Ansible

    第一步:安装我们的epel扩展源 我这里会报/var/run/yum.pid 已被锁定,如果没有直接进行下一步 解决方法:删除/var/run/yum.pid,即 rm -rf /var/run/yum.pid ,重新执行第一步 第二步:安装 ansible 如果还报/var/run/yum.pid 已被锁定,还是直接进行删除,然后重新执行 yum -y install ansible 第三

    2024年02月13日
    浏览(67)
  • 【Jlink烧录自动化】一台电脑连接 多个Jlink 用 J-flash批处理程序烧写多个单片机(生产批量烧录)

    最近一些设备需要进行预生产(小批量生产),虽然是小批量但是数量也是很多,单靠人力烧录设备比较耗费时间 因此需要做一个烧录治具批量烧录。 软件 由于设备的MCU是arm cortex M4内核,使用的是Jlink烧录因此要安装 Segger Jlink 安装之后开J-flash 物料准备 由于要一次烧录多

    2024年01月17日
    浏览(57)
  • Appium+python自动化(二十六)- Toast提示(超详解)简介

    开始今天的主题 - 获取toast提示 在日常使用App过程中,经常会看到App界面有一些弹窗提示(如下图所示)这些提示元素出现后等待3秒左右就会自动消失,这个和我日常生活中看到的烟花和昙花是多么的相似,那么我们该如何获取这些元素文字内容呢? Android中的Toast是一种简

    2024年02月15日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包