python - 需要将 Windows 应用程序(在我的情况下为 Excel)带到前台 - python
问题描述
我正在创建一个 Windows 自动化脚本。我需要将 Excel 应用程序带到前台。我能够打开 excel 应用程序并获取正在运行的子进程列表。但我不确定如何将 Excel 应用程序放到前台。请帮忙
import subprocess
from win32com.client import Dispatch
xl = Dispatch("Excel.Application")
xl.Visible = True
cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
print(line)
我正在打开应用程序列表,但我需要将 Excel 置于前台。请帮我怎么做。
b'EXCEL.EXE "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
b'搜索过滤器主机。可执行程序740 \r\r\n' b'python.exe C:\Users\arvin\AppData\Local\Programs\Python\Python37-32\python。可执行程序\r\r\n' b'conhost.exe \??\C:\WINDOWS\system32\conhost.exe 0x415724 \r\r\n' b'cmd.exe C:\WINDOWS\system32\cmd.exe /c "WMIC PROCESS get Caption,Commandline,Processid"18084 \r\r\n'
解决方案
如果您使用所有 Microsoft Office 应用程序,则object.Activate()方法可能会起作用。这是 Microsoft VBA 和 C# 应用程序调用的一部分,也可用于第 3 方语言。下面的代码在我的 Windows 10 环境、带有 pywin32 的 python 3.7 和 MS-Office 2013 上进行了测试。
####### Activate one excel file ##############
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb1 = excel.Workbooks.Open(r'C:\python\so\sheet1.xlsx')
wb2 = excel.Workbooks.Open(r'C:\python\so\sheet2.xlsx')
wb3 = excel.Workbooks.Open(r'C:\python\so\sheet3.xlsx')
excel.Visible = True
# This will open 3 workbooks with wb1 on top.
excel.Application.ActiveWorkbook.Name
# Prints name of currently active workbook, i.e., the one on top.
wb3.Activate() # puts workbook3 on top
wb2.Activate() # puts workbook2 on top
### You may need to install pywin32.
### pip install pywin32
推荐阅读
- python - 使用未声明的标识符“NUMPY_IMPORT_ARRAY_RETVAL”返回 NUMPY_IMPORT_ARRAY_RETVAL;
- java - 静态方法和字段是否在定义它们的类的实例中占用内存?
- matlab - Matlab在构造函数中无法更改类的参数
- git - git:以编程方式撤消修改后的邮递员集合中的特定更改
- javascript - 最新制表器中选择编辑器的标题过滤器问题
- mysql - Sequelize 抛出错误“必须是唯一的”
- python - 从 groupedby one 的分组列创建数据框
- javascript - 如何将自定义属性(例如文件哈希)添加到 dropzone?
- node.js - 将带有内部关系数据的 JSON 推送到 MongoDB?
- flutter - URI 的目标不存在:'package:flutter_riverpod/flutter_riverpod.dart'