我目前正在使一些数据处理自动化,并且需要更新许多Excel工作表中的数据模型。
我选择手动编写基于Python win32Com的解决方案,而不是手动更新这些文件
这是我当前的功能
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'])
我想同时运行此代码,并尝试了以下操作
从current.futures导入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实例?