使用python动态读取和/或覆盖excel文件,而不显示覆盖警报

使用python动态读取和/或覆盖excel文件,而不显示覆盖警报,python,excel,win32com,bloomberg,Python,Excel,Win32com,Bloomberg,由于某些原因,以下代码运行正常,但文件覆盖警报一直出现,即使我已将xl.EnableEvents设置为False,除非我手动单击覆盖文件弹出窗口,否则代码将不会进一步执行。有人知道如何解决这个问题吗 代码打开一个excel文件,其中包含一个字符串,允许excel文件连接到bloomberg api,我使用此解决方案使其工作。只要文件打开足够长的时间,数据就会被拉入文件,然后保存并退出。获取数据大约需要35秒,pandas表开始显示我请求的内容 问题是弹出窗口我需要查看字符串“#N/A Reque

由于某些原因,以下代码运行正常,但文件覆盖警报一直出现,即使我已将xl.EnableEvents设置为False,除非我手动单击覆盖文件弹出窗口,否则代码将不会进一步执行。有人知道如何解决这个问题吗

代码打开一个excel文件,其中包含一个字符串,允许excel文件连接到bloomberg api,我使用此解决方案使其工作。只要文件打开足够长的时间,数据就会被拉入文件,然后保存并退出。获取数据大约需要35秒,pandas表开始显示我请求的内容

问题是弹出窗口我需要查看字符串“#N/A Requesting Data…”何时不再存在于文件中,并且在不定期保存文件的情况下无法查看执行此操作的方法。如果有一个解决方案可以让我在不保存文件的情况下动态查看文件内容,那就太好了

这个解决方案对我来说无法阻止弹出窗口,我可能每次都会创建一个新文件,然后在最后将它们全部删除,但这似乎有点笨拙。如果有人想在更完整的上下文中查看代码和问题,这个问题将扩展这个问题

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
WB='C:/path/to/my/file.xlsx'
location=“EGLL”
def run_VWA(WB,位置):
“”“打开excel文件,留出足够的时间提取数据,然后关闭并保存”“”
bb='C:/blp/API/officetools/BloombergUI.xla'
xl=win32com.client.DispatchEx(“Excel.Application”)
xl.工作簿.打开(bb)
xl.AddIns(“彭博Excel工具”).Installed=True
wb=xl.Workbooks.Open(Filename=wb)#以只读模式打开工作簿。
xl.Visible=False
xl.EnableEvents=False
xl.DisplayAlerts=False
总数=0
colstring='#不适用于请求数据…'
虽然总数<40:
wb.Save()
df=来自excel的df(WB,位置)
如果colstring不在df中:
打破
时间。睡眠(3)
总数+=3
wb.Close(保存更改=1)
xl.DisplayAlerts=True
xl.Quit()
#清理com引用。
德尔xl
返回

非常感谢您提供的任何帮助,我对win32com库的使用经验非常有限。

经过几个小时的挖掘,我发现了如何动态解决此问题,而无需每次迭代都保存文件。如果有其他人遇到这个问题,大部分解决方案都找到了。非常感谢assylias提供了一些有用的建议

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

    count=0
    while True:
        readData = wb.Worksheets(location)
        allData = readData.UsedRange
        if allData.Rows.Count > 1 or allData.Columns.Count > 1:
            print('rows: {}'.format(allData.Rows.Count))
            print('cols: {}'.format(allData.Columns.Count))
            break
        print(wb)
        print(count)
        time.sleep(3)
        count+=3


    wb.Close(SaveChanges=1)
    xl.DisplayAlerts = True
    xl.Quit()
    #Cleanup the com reference. 
    del xl   

    return

您确定每次迭代都需要
wb.Save()
?必须有另一种方法来查询电子表格中的数据。是的,这是我所希望的,但我对库不太熟悉,不知道如何查询,我在堆栈溢出上找不到任何这样的例子-尽管可能不知道要搜索的正确关键字可能会破坏我的搜索。其他人遇到这个问题,请参见下面的答案。