首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Python刷新Excel - Power查询数据

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

Stack Overflow用户
提问于 2017-10-09 15:07:06
回答 1查看 4.1K关注 0票数 6

我试图使用以下代码通过Python刷新一个强大的查询- Excel中的外部数据

代码语言:javascript
复制
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.then,我要去options,(这里power query add-on已经加载了),禁用add -on,关闭excel,再次打开,重新加载add -on。

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

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

代码语言:javascript
复制
import os
os.system("taskkill /f /im excel.exe")

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-02-28 03:04:42

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

代码语言:javascript
复制
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任务,它们可能会造成问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46640552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档