栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Python获取活动的Excel工作簿的名称

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Python获取活动的Excel工作簿的名称

编辑评论

可能会有更好的方法来执行此操作。

安装出色的psutil

import psutilexcelPids = []for proc in psutil.process_iter():  if proc.name == "EXCEL.EXE": excelPids.append(proc.pid)

现在枚举窗口,但获取窗口标题和pid。

windowPidsAndTitle = []win32gui.EnumWindows(lambda hwnd, resultList: resultList.append((win32gui.GetWindowThreadProcessId(hwnd),win32gui.GetWindowText(hwnd))), windowPidsAndTitle)

现在只需找到我们excelPids中的第一个pid

  for pid,title in windowPidsAndTitle:    if pid in excelPids:      return title

结束编辑

这里有很多事情要考虑:

一个实例是否打开了多个工作簿?在这种情况下

xl = win32com.client.Dispatch("Excel.Application")xl.ActiveWorkbook.FullName

确实会给您最后一个有效的工作簿。

还是有单独的EXCEL.EXE实例正在运行?
您可以使用以下方法获取每个实例:

xl = win32com.client.GetObjec(None, "Excel.Application") #instance onexl = win32com.client.GetObject("Name_Of_Workbook") #instance two

但这不能达到目的,因为您需要知道名字,而这不会告诉您最后一个焦点。

在上面的@tgrays评论中,如果您的excel实例被保证为前台窗口,则:

import win32guiwin32gui.GetWindowText(win32gui.GetForegroundWindow()) #parse this and use GetObject to get your excel instance

但是最坏的情况是场景场景,有多个实例,您必须找到最后一个焦点,您必须枚举所有窗口并找到您关心的窗口:

windows = []win32gui.EnumWindows(lambda hwnd, resultList: resultList.append(win32gui.GetWindowText(hwnd)),windows)#enumerates all the windows open from the top down[i for i in windows if "Microsoft Excel" in i].pop(0)#this one is closest to the top

祝你好运!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/640381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号