如何关闭由其他应用程序打开的Excel文件?在win32com.client中使用python

2024-09-28 22:19:27 发布

您现在位置: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,today_modified,file_name,session)

Tags: 文件textclientnonetodaysessionusrwin32com