Excel - 通过Python

时间:2017-10-09 07:07:06

标签: 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()

它工作正常并达到目的,但只有一次。 可见打开的excel文件关闭,但在任务管理器中它没有完全关闭。 虽然我没有太多问题,但是,当我尝试为下一个文件运行它时,'Power Query'附加组件停止加载,我得到错误说, 需要加载power query add-on才能刷新此数据。  我必须去任务经理关闭excel.then, 我必须去选项,(已经加载了电源查询插件),禁用添加-on,关闭excel,再次打开,重新加载插件。

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

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

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

由于

1 个答案:

答案 0 :(得分:1)

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

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任务,则会引起问题。