如何解决如何关闭由另一个应用程序打开的 Excel 文件?在 win32com.client 中使用 python
我正在使用 Python 在 SAP GUI 中自动执行流程,使用库 win32com.client。
一切顺利,直到 SAP 在流程的最后打开一个 Excel 文件。
我需要关闭这个文件(而且只有这个文件)。
原始脚本来自一个 .bas 文件,我将必要的内容重写为 Python。
在 .bas 文件中,Excel 文件用 Workbooks("YVA05_********").Close
请用简单的一行帮助我关闭这个 Excel 文件(就像旧代码一样,但对于我的 Python 应用程序),我将永远感激。
干杯
from datetime import datetime
from win32com.client import Dispatch
import win32com.client
import time
import subprocess
excel = Dispatch("Excel.Application")
today = datetime.today()
today_modified = "{:02}.{:02}.{}".format(today.month,today.day,today.year)
month_init = "{:02}.01.{}".format(today.month,today.year)
file_name = f"{today.year}-{today.month:02}"
def extract_data_process(month_init,today_modified,file_name,session):
session.findById("wnd[0]/usr/ctxtS_SAUDAT-LOW").text = f"{month_init}"
session.findById("wnd[0]/usr/ctxtS_SAUDAT-HIGH").text = f"{today_modified}"
session.findById("wnd[0]/tbar[1]/btn[8]").press()
time.sleep(6)
session.findById("wnd[0]/usr/cntlCONTAINER/shellcont/shell").pressToolbarContextButton("&MB_EXPORT")
session.findById("wnd[0]/usr/cntlCONTAINER/shellcont/shell").selectContextMenuItem("&XXL")
session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\\Users\\*****************"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = f"YVA05_{file_name}.XLSX"
session.findById("wnd[1]/tbar[0]/btn[11]").press()
# Here the excel is opened
session.findById("wnd[0]/tbar[0]/btn[3]").press
pathname = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
subprocess.Popen(pathname)
time.sleep(8)
SapGuiAuto = win32com.client.GetObject('SAPGUI')
if not type(SapGuiAuto) == win32com.client.CDispatch:
exit()
application = SapGuiAuto.GetScriptingEngine
if not type(application) == win32com.client.CDispatch:
SapGuiAuto = None
exit()
connection = application.OpenConnection("*****************",True)
if not type(connection) == win32com.client.CDispatch:
application = None
SapGuiAuto = None
exit()
session = connection.Children(0)
if not type(session) == win32com.client.CDispatch:
connection = None
application = None
SapGuiAuto = None
exit()
session.findById("wnd[0]/usr/txtRSYST-MANDT").text = "***"
session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "***********"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "**************"
session.findById("wnd[0]/usr/txtRSYST-LANGU").text = "EN"
session.findById("wnd[0]").sendVKey(0)
# time.sleep(2)
# session.findById("wnd[1]").sendVKey(0)
# time.sleep(2)
session.findById("wnd[0]/tbar[0]/okcd").text = "****"
session.findById("wnd[0]/tbar[0]/btn[0]").press()
session.findById("wnd[0]/tbar[1]/btn[17]").press()
session.findById("wnd[1]/usr/txtV-LOW").text = "*********"
session.findById("wnd[1]/usr/txtENAME-LOW").text = ""
session.findById("wnd[1]/tbar[0]/btn[8]").press()
extract_data_process(month_init,session)
解决方法
希望这个功能能解决你的问题
import os
def close():
try:
os.system('TASKKILL /F /IM excel.exe')
except Exception:
print("KU")
close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。