Python for循环向已有Excel工作表追加数据框与文本的方法
实现Python读取Excel多表计算后追加汇总结果
需求说明
编写Python代码实现以下逻辑:
- 读取Excel文件内多个工作表的数据
- 完成指定列求和计算
- 将汇总结果追加到对应数据来源工作表的原有数据底部
- 格式要求:原有数据下方空2行开始写入汇总内容
示例参考
原始工作表数据
ID APP 1 20 2 50 3 79 4 34 5 7 6 5 7 3 8 78
期望输出格式
ID APP 1 20 2 50 3 79 4 34 5 7 6 5 7 3 8 78 Sumary: Total=276
原有代码问题
之前的代码运行无响应是因为存在以下硬错误:
- 无效导入:
from excel import append_df_to_excel不存在对应模块和方法,属于无效引用 - 语法错误:分组计算写法错误,
df.groupby['App'].sum存在调用符号错误(groupby是方法需要用括号调用)、列名拼写错误(实际列名是大写APP)、方法未加括号执行的问题,且本需求求整列总和不需要groupby操作 - 写入逻辑错误:使用
xlsxwriter引擎创建写入对象会直接覆盖整个原Excel文件,无法实现追加效果;循环工作表时硬编码写入Sheet1,和遍历的工作表名不匹配 - 变量错误:
writer.sheets[data']缺少前引号,且data变量未定义 - 异常捕获错误:裸
except Exception: continue会直接吞掉所有运行报错,看不到任何错误提示,也是运行后无任何反馈的核心原因 - 位置计算缺失:没有计算原有数据的行高,无法准确定位空2行后的写入位置
可运行实现方案
前置依赖安装
先安装需要的第三方库:
pip install pandas openpyxl
完整代码
import pandas as pd from openpyxl import load_workbook path = 'data.xlsx' # 读取所有工作表信息 excel_reader = pd.ExcelFile(path, engine='openpyxl') # 加载现有工作簿,保留原有所有数据和格式 wb = load_workbook(path) for sheet_name in excel_reader.sheet_names: # 读取当前工作表数据 df = pd.read_excel(excel_reader, sheet_name=sheet_name) # 计算APP列总和 total_val = df['APP'].sum() # 获取当前工作表操作对象 ws = wb[sheet_name] # 计算写入起始行:表头1行+数据行数,空2行后开始写汇总 write_start_row = 1 + len(df) + 3 # 写入汇总内容 ws.cell(row=write_start_row, column=1, value='Sumary:') ws.cell(row=write_start_row + 1, column=1, value=f'Total={int(total_val)}') # 保存修改 wb.save(path) wb.close()
代码说明
- 采用
openpyxl引擎加载现有Excel文件,写入时不会覆盖原有工作表和数据 - 自动适配每个工作表的数据行数,严格按照要求空2行后写入汇总,不会出现内容错位
- 求和逻辑和示例结果完全匹配,示例数据计算结果为276
- 移除了吞异常的错误捕获逻辑,运行时如果出现文件被占用、列名不匹配等问题会直接抛出错误,方便排查
- 自动遍历所有工作表,汇总结果会写入对应来源的工作表,不需要硬编码工作表名
内容的提问来源于stack exchange,提问作者Rob John
相关产品推荐
相关产品推荐

