Excel中Python刷新powerquery查询链接,PowerQuery


在某些业务场景中,你可能大量含有PowerQuery查询链接的工作簿需要定时刷新获取最新的数据,但是人工刷新有太麻烦,这时候可以用到Python实现。Python中的win32com.client调用“Excel.Application”来实现刷新

引用模块:

from win32com.client import Dispatch
import win32com.client

刷新代码如下:

def getWin32excel(pathlist):
    for pathfile in pathlist:
        time.sleep(20)
        path = pathfile.replace('\\', '/')
        f_log = open(time.strftime("%Y-%m-%d" + '.log', time.localtime()), 'a', encoding='UTF-8-sig')
        print('------------正在刷新以下文件:-----------')
        print(path)
        # 创建Excel程序App
        xlapp = win32com.client.Dispatch('Excel.Application')
        # 窗口是否可见
        xlapp.Visible = True
        # 是否显示警告信息
        xlapp.DisplayAlerts = False
        try:
            wb = xlapp.Workbooks.Open('%s' % path)
        except:
            log = '该文件已损坏,无法打开!请核查该文件,损坏文件:%s' % path
            f_log.write(log + '\n')
            print(log)
            f_log.close()
            continue
        # 统计工作簿含有多少外部链接
        connCounts = wb.Connections.Count
        if connCounts == 0:
            log = '{0}个外部数据源!,跳过!'.format(connCounts)
            f_log.write(log + '\n')
            print(log)
            wb.Close()
            f_log.close()
            continue
        else:
            time.sleep(2)
            wb.RefreshAll()
            time.sleep(10)
            wb.Save()
            wb.Close()
            # xlapp.Quit()
            log = '{0}个外部刷新成功,开始执行下一个文件,当前时间:{1},当前文件{2}'.format(connCounts,
                                                                 time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
                                                                 path)
            print(log)
            f_log.write(log + '\n')
            f_log.close()