В настоящее время я автоматизирую несколько процессов обработки данных, и мне необходимо обновить модели данных в виде нескольких таблиц Excel.
Вместо того, чтобы вручную обновлять эти файлы, я решил написать сценарий решения на основе Python win32Com * 1003.*
Вот моя текущая функция
import win32com.client, os
def updateExcelFile(directory, fileName):
print('updating {fileName}'.format(fileName=fileName))
root = os.path.dirname(os.path.realpath(__file__))
xlapp = win32com.client.Dispatch('Excel.Application'))
wb = xlapp.Workbooks.Open(root + '\\EXCEL\\{directory}\\{fileName}.xlsx'.format(directory=directory, fileName=fileName))
wb.RefreshAll()
time.sleep(30)
wb.Close(SaveChanges=True)
xlapp.Quit()
print('{fileName} saved'.format(fileName=fileName))
if __name__ == '__main__':
for excelFile in excelFiles:
updateExcelFile(directory=excelFile['directory'], fileName=excelFile['fileName'])
Я хотел бы запустить этот код одновременно и попробовал следующее
из concurrent.futures import ThreadPoolExecutor
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=10) as executor:
for excelFile in excelFiles:
executor.submit(updateExcelFile, directory=excelFile['directory'], fileName=excelFile['fileName'])
Это правильно запустит процесс обновления одновременно для всех пяти листов Excel.однако, похоже, что после сохранения первого листа и однократного запуска xlapp.Quit все остальные процессы также будут уничтожены.
Как мне запустить несколько экземпляров win32com одновременно?