用于刷新单个Excel工作表中的连接的Python代码

时间:2017-12-08 17:42:22

标签: python excel excel-vba win32com vba

我是python的初学者。我在excel中写了几个DBQ语句来获取 导致excel,每当打开excel时都应该刷新。已在连接属性中给出了正确的设置。

Below is my python code for refreshall:- 

import win32com.client  
import time
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.workbooks.open("D:\\Excel sheets\\Test_consolidation.xlsx")
xl.Visible = True
time.sleep(10)
wb.Refreshall()

excel文件中有3张,有3种不同的连接。我想一个接一个地刷新。

有人可以帮我用python代码单独刷新连接吗?我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

因此,如果你想要一个接一个地刷新所有这些,而不是wb.Refreshall(),那么命令将是:

for conn in wb.connections:
    conn.Refresh()

如果要链接(例如在字典中)与表单的连接:

dict_conn_sheet = {} # create a new dict
for conn in wb.connections: # iterate over each connection in your excel file
    name_conn = conn.Name # get the name of the connection
    sheet_conn = conn.Ranges(1).Parent.Name # get the name of the sheet linked to this connection
    # add a key (the name of the sheet) and the value (the name of the connection) into the dictionary
    dict_conn_sheet[sheet_conn] = name_conn 

注意:如果一张表有多个连接,这不是一个好方法。

然后,如果您只想更新特定工作表上的一个连接(在我的示例中称为Sheet1):

sheet_name = 'Sheet1'
# refresh the connection linked to the sheet_name 
# if existing in the dictionnary dict_conn_sheet
wb.connections(dict_conn_sheet[sheet_name]).Refresh() 

最后,如果您直接知道要更新的连接的名称(比如说connection_Raj),只需输入:

name_conn = 'connection_Raj'
wb.connections(name_conn).Refresh()

我希望很明显,即使它没有完全回答你的问题,因为我不确定我明白你想做什么。