Excel - 通过 Python 进行 Power 查询数据刷新

emu*_*ria 6 python excel vba powerquery

我正在尝试使用以下代码通过 Python 刷新电源查询 - Excel 中的外部数据

import win32com.client
import time
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.workbooks.open(fileName)
xl.Visible = True
wb.RefreshAll()
wb.Save()
xl.Quit()
Run Code Online (Sandbox Code Playgroud)

它工作正常并达到目的,除了一次。可见打开的 excel 文件关闭,但在任务管理器中它没有完全关闭。虽然我对此没有太大问题,但是,当我尝试为下一个文件运行它时,“Power Query”加载项停止加载,并且我收到错误消息,说需要加载功率查询加载项以刷新此数据。我必须去任务管理器关闭excel。然后,我必须去选项,(电源查询附加组件已经加载),禁用附加组件,关闭excel,再次打开,重新加载添加-在 。

请问有没有人遇到过这种问题,或者如何摆脱它。我的整个目的是通过某种类型的自动化每天使用外部数据刷新 excel 中的一些文件。

编辑:找到解决方案,在代码末尾添加以下行

import os
os.system("taskkill /f /im excel.exe")
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 1

我知道这是一个老问题,但我刚刚遇到它。在退出 Excel 之前,您需要关闭 Excel Workbook 对象。奇怪的是,当您退出 Excel 对象时,Excel 工作簿仍然保留在内存中并运行 - 这有点令人困惑。您应该将 wb.Save() 命令替换为 wb.Close(True) 命令。

import win32com.client
import time
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.workbooks.open(fileName)
xl.Visible = True
wb.RefreshAll()
wb.Close(True)
xl.Quit()
Run Code Online (Sandbox Code Playgroud)

也就是说,保留os.system("taskkill /f /im excel.exe")作为备份也很好。我发现CloseQuit命令并不是万无一失的,如果您不定期终止未完成的 Excel 任务,可能会导致问题。