簡體   English   中英

如何關閉另一個應用程序打開的 Excel 文件? 將 python 與 win32com.client 一起使用

[英]How to close an Excel file opened by another application? Using python with win32com.client

我正在使用 Python 使用庫 win32com.client 來自動化 SAP GUI 中的流程。

一切正常,直到 SAP 在進程的最后打開一個 Excel 文件。

我需要關閉這個文件(並且只有這個文件)。

原來的腳本來自a.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)

希望這個 function 能解決您的問題

import os

def close():

    try:
        os.system('TASKKILL /F /IM excel.exe')

    except Exception:
        print("KU")

close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM