如何让 Excel RefreshAll 等待关闭直到完成?
Posted
技术标签:
【中文标题】如何让 Excel RefreshAll 等待关闭直到完成?【英文标题】:How do I make an Excel RefreshAll wait to close until finished? 【发布时间】:2016-03-21 16:17:02 【问题描述】:我正在尝试使用以下 Python 脚本刷新 Excel 文件:
xl = Dispatch('Excel.Application')
workbook = xl.Workbooks.open('\\path\to\workbook.xlsx')
xl.Visible = True
workbook.RefreshAll()
xl.Quit()
但是,后台查询(连接到 SQL 数据库)需要一段时间才能刷新。
如何防止此电子表格在 RefreshAll 完成之前关闭?
【问题讨论】:
***.com/questions/22083668/… 我认为这是一个副本:***.com/questions/11832628/… 【参考方案1】:CalculateUntilAsyncQueriesDone() 将暂停程序并等待刷新完成。
xl = Dispatch('Excel.Application')
workbook = xl.Workbooks.open('\\path\to\workbook.xlsx')
xl.Visible = True
workbook.RefreshAll()
xl.CalculateUntilAsyncQueriesDone()
xl.Quit()
【讨论】:
【参考方案2】:对于“查询”和数据透视表,您可以执行此操作您必须遍历每个工作表和查询/数据透视表以将背景刷新设置为 False,因为它是表本身的属性(而不是在工作簿级别,比如说。)
**对于数据透视表,Python 模块中的数据透视表似乎不可迭代,因此我基本上设置了一个计数器(根据需要进行调整)来查看每个工作表的最大(预期!)数据透视表数(我将其设置为 5)。一旦发现没有从 1 到 5 的索引号的数据透视表,它就会停止。(假设索引从 1 开始连续,并且您不能说没有数据透视表(1)但有数据透视表(2) . 如果这是错误的,请纠正我的答案!
for sheet in workbook.Sheets:
print(sheet.name)
for table in sheet.QueryTables:
print("Found a query table on %s called %s" % (sheet.name, table.name))
table.BackgroundQuery = False # i.e.: disable background query, and therefore cause Excel to 'wait' until it's done refreshing
if table.Refresh() == True: # This both refreshes the table, AND if the Refresh() method returns True (i.e.: refreshes successfully), tells you so.
print("Query table %s refreshed!" % table.name)
else:
print("Query table %s FAILED to refresh." % table.name)
for i in range(1,5):
try:
print("Found pivot table #%s called %s" % (i,sheet.PivotTables(i).Name))
if sheet.PivotTables(i).RefreshTable()==True:
print("Refreshed pivot table %s" % sheet.PivotTables(i).Name)
else:
print("FAILED to refresh pivot table %s" % sheet.PivotTables(i).Name)
except:
print("No pivot table #%s found on sheet %s" % (i,sheet.Name))
break # Break out of the for loop, since there's no point in continuing the search for pivots, I believe (but could be wrong about that! Try creating two pivots, then deleting the first. Does the second become PivotTables(1), or stay as 2?)
【讨论】:
注意:我还没有弄清楚如何禁用数据透视表的后台查询刷新...不确定这是否会给您带来问题。 目前这不是问题,因为我不需要数据透视表(至少现在)。我最终必须调查一下,我敢肯定。再次感谢!如果我这样做了,我会试试你的数据透视表建议,看看效果如何!以上是关于如何让 Excel RefreshAll 等待关闭直到完成?的主要内容,如果未能解决你的问题,请参考以下文章
求各位大神帮忙解答!在下载或者导出excel表的时候,加入一个等待状态——thinkPHP3.2.3