数据表
我正在尝试使用 python 脚本更新数据表中的单元格值。但 RefreshAll 事件没有被触发并更新 Sheet1 工作表中的数据透视表。
这是从文本文件读取值并更新数据表的 Python 脚本
excel_filepath = "test_excel_file2.xlsm"
txt_filepath = "txt_excel.txt"
data_sheet = "data"
calc_sheet = "Sheet1"
df = pd.read_csv(txt_filepath, sep="|")
print(df)
wb = load_workbook(excel_filepath, keep_vba=True)
ws = wb[data_sheet]
ws.delete_rows(1,ws.max_row)
wb.save(excel_filepath)
ws.active = data_sheet
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
wb.save(excel_filepath)
new_df = pd.read_excel(excel_filepath, sheet_name=None)
print(new_df[calc_sheet])
这里 new_df 变量没有返回更新后的值
如何解决这个问题?
如果您将代码更改为类似的内容,那么它将起作用;
使用 Xlwings 打开并更新 EXCEL 中的工作表,这允许更新数据透视表,并在使用
pd.read_excel
读取时保存后,它将获得更新数据。
import pandas as pd
import xlwings as xw
excel_filepath = "test_excel_file2.xlsm"
txt_filepath = "txt_excel.txt"
data_sheet = "data"
calc_sheet = "Sheet1"
df = pd.read_csv(txt_filepath, sep="|")
print(df)
with xw.App(visible=True) as app:
wb = xw.Book(excel_filepath)
ws = wb.sheets[data_sheet]
### Can clear the existing data but its not necessary
# ws.range("A2:B5").clear_contents()
ws["A1"].options(pd.DataFrame, header=1, index=False, expand='table').value = df
wb.save()
new_df = pd.read_excel(excel_filepath, sheet_name=None)
print(new_df[calc_sheet])
控制台
col val
0 a 10
1 b 2
2 c 3
3 a 10
Row Labels Sum of val
0 a 20
1 b 2
2 c 3
3 Grand Total 25