如何关闭另一个应用程序打开的 Excel 文件?使用 python 和 win32com.client
How to close an Excel file opened by another application? Using python with win32com.client
我正在使用 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,today_modified,file_name,session)
希望这个功能能解决您的问题
import os
def close():
try:
os.system('TASKKILL /F /IM excel.exe')
except Exception:
print("KU")
close()
我正在使用 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,today_modified,file_name,session)
希望这个功能能解决您的问题
import os
def close():
try:
os.system('TASKKILL /F /IM excel.exe')
except Exception:
print("KU")
close()