关于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里设置数据透视表打开刷新即可 设置路径:数据透视–》设计–》选项–》数据–》(勾选)打开文件时刷新数据