汇总团队数据时,是不是总在反复接收文件→复制粘贴→比对差异的循环中?比如10个部门分别填写的“月度计划.xlsx”,手动汇总到总表要逐行核对,数字不一致还要逐个找原因,2小时都未必能搞定。在掌握了文件安全处理后,我们可以聚焦团队协作痛点——用Python自动合并多人填写的Excel,标记不同版本的差异内容,让数据汇总既快又准,减少协作摩擦!
必备库安装教程
bash
# 核心Excel处理库(高效读取和写入)
pip install pandas openpyxl
# 标记Excel单元格差异(高亮显示)
pip install xlsxwriter # 用于设置单元格格式
1. 代码拆解
python
import os
import pandas as pd
from xlsxwriter.utility import xl_rowcol_to_cell
import numpy as np
# 步骤1:配置汇总参数
INPUT_FOLDER = "各部门计划" # 存放多人填写的Excel文件夹
TEMPLATE_COLUMNS = ["部门", "项目", "计划金额(元)", "负责人", "截止日期"] # 统一列名(确保所有人表格结构一致)
OUTPUT_FILE = "月度计划汇总表.xlsx" # 汇总结果文件
REFERENCE_SHEET = "参考版本" # 作为基准的版本(如上次汇总表)
HIGHLIGHT_COLOR = "#FFEB9C" # 差异单元格高亮颜色(浅黄色)
# 步骤2:读取所有待汇总的Excel文件
def read_all_excels():
all_data = []
for file in os.listdir(INPUT_FOLDER):
if file.lower().endswith(".xlsx") and not file.startswith("~#34;):
file_path = os.path.join(INPUT_FOLDER, file)
try:
# 读取表格,只保留指定列(避免额外列干扰)
df = pd.read_excel(file_path, usecols=TEMPLATE_COLUMNS)
# 添加“来源文件”列,方便追溯
df["来源文件"] = file
all_data.append(df)
print(f"已读取:{file},共{len(df)}行数据")
except Exception as e:
print(f"读取失败 {file}:{e}")
if not all_data:
print("未找到有效Excel文件,终止汇总")
return None
# 合并所有数据
merged_df = pd.concat(all_data, ignore_index=True)
return merged_df
# 步骤3:标记与参考版本的差异
def mark_differences(merged_df):
# 检查是否有参考版本
if not os.path.exists(REFERENCE_SHEET + ".xlsx"):
print("无参考版本,直接保存汇总结果")
return merged_df, None
# 读取参考版本数据
ref_df = pd.read_excel(f"{REFERENCE_SHEET}.xlsx")
# 找到用于比对的唯一标识列(如“部门+项目”组合)
key_columns = ["部门", "项目"]
# 合并汇总表和参考表,标记差异
merged_with_ref = pd.merge(
merged_df, ref_df,
on=key_columns,
how="outer",
suffixes=("_当前", "_参考"),
indicator=True
)
# 记录差异位置(行号和列名)
differences = []
for idx, row in merged_with_ref.iterrows():
for col in TEMPLATE_COLUMNS:
if col in ["部门", "项目"]: # 标识列不比对
continue
current_val = row.get(f"{col}_当前")
ref_val = row.get(f"{col}_参考")
# 排除空值导致的差异(如新增行)
if pd.notna(current_val) and pd.notna(ref_val) and current_val != ref_val:
# 转换为汇总表中的实际行号(merged_df中的位置)
merged_idx = merged_df[(merged_df["部门"] == row["部门"]) & (merged_df["项目"] == row["项目"])].index
if not merged_idx.empty:
differences.append((merged_idx[0] + 2, col)) # +2是因为Excel表头占1行,索引从1开始
return merged_df, differences
# 步骤4:保存汇总表并高亮差异
def save_with_highlight(merged_df, differences):
# 创建Excel写入器,支持格式设置
writer = pd.ExcelWriter(OUTPUT_FILE, engine="xlsxwriter")
merged_df.to_excel(writer, sheet_name="汇总", index=False)
workbook = writer.book
worksheet = writer.sheets["汇总"]
# 定义高亮格式
highlight_format = workbook.add_format({"bg_color": HIGHLIGHT_COLOR})
# 高亮差异单元格
if differences:
# 获取列名对应的Excel列号(如A、B、C...)
col_names = merged_df.columns.tolist()
for row, col_name in differences:
col_idx = col_names.index(col_name)
# 写入高亮格式(行号从1开始,列号从0开始)
worksheet.write(row, col_idx, merged_df.iloc[row-2][col_name], highlight_format)
print(f"已标记{len(differences)}处差异,用{HIGHLIGHT_COLOR}颜色高亮")
writer.close()
print(f"汇总完成!结果保存至:{OUTPUT_FILE}")
# 将当前汇总表设为下次的参考版本
merged_df.to_excel(f"{REFERENCE_SHEET}.xlsx", index=False)
# 主函数:串联汇总流程
def main():
# 读取所有数据
merged_df = read_all_excels()
if merged_df is None:
return
# 标记差异
merged_df, differences = mark_differences(merged_df)
# 保存并高亮
save_with_highlight(merged_df, differences)
if __name__ == "__main__":
main()
代码逻辑聚焦团队协作中的数据汇总:先读取“各部门计划”文件夹中所有人填写的Excel,按统一列名合并成总表;再与“参考版本”(如上期汇总表)比对,标记“计划金额”“截止日期”等字段的差异;最后将汇总表保存为Excel,并用浅黄色高亮显示差异单元格,同时记录数据来源文件方便追溯。相比手动汇总,代码自动处理重复劳动,差异标记清晰,减少协作中的沟通成本。
2. 场景应用
- 场景:运营汇总10个区域的“活动计划.xlsx”,自动合并后发现“华东区-线下活动”的计划金额从5万改成了8万,单元格被高亮,直接联系对应区域确认原因,比逐行比对节省1.5小时;
- 场景:HR汇总各部门的“招聘需求表”,合并后标记出“技术部-前端岗位”的截止日期从6月改成7月,快速定位变动内容,无需重新核对所有部门数据;
- 场景:学生小组汇总“项目分工表”,自动合并后高亮显示“数据分析”任务的负责人从张三换成李四,方便组长确认变动是否合理。
3. 避坑指南
- 列名不一致:若有人表格的列名和 TEMPLATE_COLUMNS 不符(如“负责人”写成“对接人”),会导致读取失败,需提前统一模板格式,或在代码中添加列名映射(如 {"对接人": "负责人"} );
- 唯一标识缺失:如果“部门+项目”不能唯一区分行(如同一部门有两个同名项目),差异标记会出错,需增加标识列(如“项目ID”);
- 空值误判:新增行在参考版本中为空,代码已通过 pd.notna 排除这类“假差异”,但需注意:若参考版本中有空值,当前版本填写后会被标记为差异(属于正常情况);
- 格式丢失:合并后的Excel会丢失原文件的复杂格式(如条件格式),若需保留,可改用 openpyxl 库逐单元格复制格式(代码会更复杂)。
进阶协作优化
- 自动通知:差异标记后,通过邮件自动通知对应部门负责人(结合之前的邮件发送功能);
- 版本管理:给每次汇总表添加时间戳(如“20240522_汇总表”),方便回溯历史版本;
- 权限控制:通过代码限制可修改的列(如只允许部门修改“计划金额”,其他列锁定)。
#办公自动化协作篇 #Python汇总Excel #差异标记 #周三团队数据处理
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除
