【发布时间】:2019-07-02 14:41:17
【问题描述】:
由于某种原因,以下代码运行良好,但即使我设置了 xl.EnableEvents = False,文件覆盖警报也会不断出现,除非我手动单击覆盖文件弹出窗口,否则代码不会进一步执行。有谁知道如何解决这一问题?
代码会打开一个 excel 文件,其中包含一个允许 excel 文件连接到bloomberg api 的字符串,我使用了这个解决方案here 来让它工作。只要文件打开足够长的时间,数据就会被拉入文件中,然后保存并退出。获取数据大约需要 35 秒,pandas 表开始显示我请求的内容
问题是弹出窗口! - 我需要查看字符串 '#N/A Requesting Data...' 何时不再在文件中,并且如果不定期保存文件就看不到执行此操作的方法。让我无需保存即可动态查看文件内容的解决方案会很棒。
here 的解决方案对我来说无法停止弹出窗口,我可能每次都可以创建一个新文件,然后最后将它们全部删除,但这似乎有点笨拙。这个问题扩展了这个问题here,如果有人想在更完整的上下文中查看代码和问题。
WB = 'C:/path/to/my/file.xlsx'
location = "EGLL"
def run_VWA(WB, location):
"""open the excel file, allow enough time to pull the data, then close and save"""
bb = 'C:/blp/API/Office Tools/BloombergUI.xla'
xl=win32com.client.DispatchEx("Excel.Application")
xl.Workbooks.Open(bb)
xl.AddIns("Bloomberg Excel Tools").Installed = True
wb = xl.Workbooks.Open(Filename=WB) #opens workbook in readonly mode.
xl.Visible = False
xl.EnableEvents = False
xl.DisplayAlerts = False
total=0
colstring='#N/A Requesting Data...'
while total < 40:
wb.Save()
df = df_from_excel(WB, location)
if colstring not in df:
break
time.sleep(3)
total+=3
wb.Close(SaveChanges=1)
xl.DisplayAlerts = True
xl.Quit()
#Cleanup the com reference.
del xl
return
非常感谢任何帮助,我对 win32com 库的经验非常有限。
【问题讨论】:
-
您确定每次迭代都需要
wb.Save()吗?必须有另一种方法来查询电子表格中的数据。 -
是的,这就是我所希望的,但对库还不够熟悉,无法知道如何操作,我在堆栈溢出时找不到任何示例——尽管可能不知道要搜索的正确关键字可能破坏了我的搜索。其他人遇到此问题,请参阅下面的答案。
标签: python excel win32com bloomberg