Как добавить дескриптор atexit к отправке / открытию книги Win32 Excel - PullRequest
0 голосов
/ 29 мая 2020

Фон: Я пытаюсь добавить защиту в мой процесс открытия файлов Win32 Excel Dispatch / Excel при работе на облачной платформе, поскольку они иногда взламывают sh во время процесса и блокируют мои файлы Excel для будущий доступ. По сути, я пытаюсь достичь той же цели, что и последний блок кода (ниже) с защитой atexit () вокруг него

Проблемы: объявленные экземпляры отправки excel внутри новую функцию, содержащую atexit (), нельзя использовать в качестве глобального экземпляра для открытия следующих двух книг.

Любая помощь будет оценена! Заранее спасибо!

#declare file folder paths
folder = xxxxx\xxxxx\xxxxxx\xxx
to_File = os.path.join(folder,'hello.xlsx')
refresh_File = os.path.join(folder,'hello2.xlsx')

#create safeguard procedures
def safeguard_quit(launch_name):
    launch_name.quit()

def safeguard_close(wb)
    wb.close()

#Dispatch Excel with atexit() safeguard
def safeguard_launch(launch_name = 'exl'):
    launch_name = win32.DispatchEx('Excel.Application')
    launch_name.DisplayAlerts = False
    launch_name.Visible = False #don't actually show up on the screen
    launch_name.AskToUpdateLinks = False
    atexit.register(safeguard_quit,launch_name) 
    return launch_name

#Open workbook with atexit() safeguard
def open_wb(name,address):
    name = exl.Workbooks.Open(address)
    atexit.register(safeguard_close,name) 
    return name

#Dispatch Excel and Open two workbooks
safeguard_launch()
open_wb(datawb, to_File)
open_wb(openwb, refresh_File)

#Basically I am trying to achieve below lines with atexit() safeguard added
exl = win32.DispatchEx('Excel.Application')
exl.DisplayAlerts = False
exl.Visible = False #don't actually show up on the screen
exl.AskToUpdateLinks = False
datawb = exl.Workbooks.Open(to_File)
openwb = exl.Workbooks.Open(refresh_File)
datawb.close()
openwb.close()
...