python刷新Excel模型数据源

问题描述:

关于excel和python的协同联动
传统python处理完的数据直接to_excel(“file_path”)
是生成了一个新文件替换掉了原来的同名文件,
新文件只有当前写入的数据,原表中的公式、透视之类的必要模型
以及其他sheet都不存在了

传统 excel建模遵循数据源和模型输出分离的原则

对于数据量比较大,处理完的数据比较小的话
可以借助python处理完直接替换掉模型数据源,可以发挥excel的可视化属性,
更方便与其他同事进行对接

代码示例:

#导入库
import pandas as pd
import numpy as np
import os,openpyxl


def refresh_data(file_path,sheet_name,data):
    book=openpyxl.load_workbook(file_path)
    writer=pd.ExcelWriter(file_path,engine="openpyxl")
    
    #在ExcelWriter的源代码中,它初始化空工作簿并删除所有工作表,
    #writer.book = book将原来表里面的内容保存到writer中
    writer.book=book
    
    #activate激活指定sheet工作表
    ws=book[sheet_name]
    
    #清空当前活动表数据
    for row in ws.iter_rows():
        for cell in row:
            cell.value=None
    
    #dataframe行列数
    idx_num,col_num=data.shape
    
    #新数据写入当前活动表-注意索引偏移
    #ws.append(line)会默认前面清除的地方有数据,从原数据位置下方开始追加
    for i in  range(1,idx_num+1):
        for j in range(1,col_num+1):
            ws.cell(row=i,column=j).value=data.iloc[i-1,j-1]
    
    #保存关闭writer
    writer.save()
    writer.close()
    
    return None

透视表刷新

#导入库
import win32com.client
import os,time

def refresh(path):
    application=win32com.client.Dispatch("Excel.Application")#调用WIn中的COM
    workbook = application.Workbooks.Open(path)#打开工作簿
    application.Visible = True
#     application.ScreenUpdating = False #打开屏幕更新
    application.AskToUpdateLinks = False
    workbook.RefreshAll()
#   刷新完成后继续执行
    application.AskToUpdateLinks = True 
    workbook.Save()
    workbook.Close(True)
    application.Quit()

数据透视表的刷新,可以不使用win32com
(上面这种方法刷新全部数据源,包含PQ模型读取的数据)
直接在excel里设置数据透视表打开刷新即可
设置路径:数据透视–》设计–》选项–》数据–》(勾选)打开文件时刷新数据
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35866846/article/details/107322273