import win32com.client
# Start an instance of Excel
xlapp = win32com.client.DispatchEx("Excel.Application")
# Open the workbook in said instance of Excel
wb = xlapp.workbooks.open(<path_to_excel_workbook>)
# Optional, e.g. if you want to debug
# xlapp.Visible = True
# Refresh all data connections.
wb.RefreshAll()
wb.Save()
# Quit
xlapp.Quit()
# Open an Instance of Application
xlapp = win32com.client.DispatchEx("Excel.Application")
# Open File
Workbook = xlapp.Workbooks.Open(<path+file name>)
# Refresh all
Workbook.RefreshAll()
# Wait until Refresh is complete
xlapp.CalculateUntilAsyncQueriesDone()
# Save File
Workbook.Save()
# Quit Instance of Application
xlapp.Quit()
#Delete Instance of Application
del xlapp
7条答案
按热度按时间f1tvaqid1#
CalculateUntilAsyncQueriesDone()将保存程序并等待刷新完成。
fruv7luv2#
如果你使用的是windows系统,我相信你已经看到了截图,你可以使用
win32com
模块。它将允许你-从Python -打开Excel,加载工作簿,刷新所有数据连接,然后退出。语法最终非常接近VBA。我建议你通过pip(
pip install pypiwin32
)安装pypiwin32
。fdx2calv3#
添加此作为答案,因为这是第一个Google链接-第一个答案中的代码工作,但大写不正确,它应该是:
rks48beu4#
一个小纸条,但很重要。上面的所有代码都是正确的,但它会引起权限Err 13的问题,因为文件只被保存,而不是关闭。
在保存后添加wb.Close(),否则打开的Excel将保留在后台应用程序中,如果您使用其中的500个,您可能会遇到一些麻烦
u3r8eeie5#
在其他人所说的基础上,当代码到达Quit行时,我再次看到保存对话框。我将DisplayAlerts标志设置为false,它解决了我的问题。我也不需要睡眠计时器。这就是我的工作:
7gs2gvoe6#
添加另一个略有变化的答案,因为我被这个难住了,没有一个解决方案是工作。对我有用的是启用
Xlsx.DisplayAlerts = True
和Xlsx.Visible = True
,然后最后用book.Save()
保存这本书,并用保存关闭:book.Close(SaveChanges=True)
。每次打开和关闭Excel都有点麻烦(我正在迭代许多Excel文件),但它工作得很好。
nhhxz33t7#
根据我在尝试现有解决方案时遇到的各种错误,我重新发布了一个更完整的答案: