繁体   English   中英

Excel - 通过 Python 刷新电源查询数据

[英]Excel - Power query data refresh via Python

我正在尝试使用以下代码通过 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()

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

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

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

import os
os.system("taskkill /f /im excel.exe")

谢谢

我知道这是一个老问题,但我只是遇到了它。 您需要在退出 Excel 之前关闭 Excel 工作簿对象。 奇怪的是,当您退出 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()

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

除了上述之外,考虑这一点。

如果查询属性“在后台启用刷新”已启用,则 wb.refreshAll() 将立即返回。

有一些方法可以检查刷新状态,例如 wb.Sheets.QueryTables.QueryTable.Refreshing 但这对 Power Queries 不起作用,因为 wb.QueryTables 返回 null,即使在对工作表和查询表进行单独调用时也是如此

因此,唯一的解决方法是在所有 refreshAll 查询中禁用“在后台启用刷新”

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM