我的知识记录

Python Excel追加数据到已有表格

用pandas和openpyxl把新数据追加到已有Excel文件末尾,不覆盖原有数据,自动对齐列,适合每日/每周往台账里追加记录。

场景痛点

每天要把当天的流水追加到同一个台账Excel里,手工打开复制粘贴容易覆盖原有数据,行数多了还卡。用Python脚本,新数据跑一下就自动接在后面,原数据不动。

用到的库

pip install pandas openpyxl

完整代码

import pandas as pd
from openpyxl import load_workbook

def append_to_excel(new_data, target_file, sheet_name="Sheet1"):
"""
把新数据追加到已有Excel末尾
new_data: DataFrame或文件路径
target_file: 目标Excel
"""
# 读取新数据
if isinstance(new_data, str):
df_new = pd.read_excel(new_data)
else:
df_new = new_data

try:
# 读已有数据
df_old = pd.read_excel(target_file, sheet_name=sheet_name)
# 按列名对齐,新旧列不一致时自动补齐
df_all = pd.concat([df_old, df_new], axis=0, ignore_index=True, sort=False)
except FileNotFoundError:
# 文件不存在,直接写新文件
df_all = df_new

df_all.to_excel(target_file, sheet_name=sheet_name, index=False)
print(f"追加完成,现有{len(df_all)}行 -> {target_file}")

def append_with_openpyxl(new_rows, target_file, sheet_name="Sheet1"):
"""
适合少量行、保留原文件样式的场景
new_rows: 列表的列表,每行一个list
"""
wb = load_workbook(target_file)
ws = wb[sheet_name]
for row in new_rows:
ws.append(row)
wb.save(target_file)
print(f"追加{len(new_rows)}行完成")

if __name__ == "__main__":
# 方式一:从新的Excel文件读数据追加
append_to_excel("./今日流水.xlsx", "./每日台账.xlsx")

# 方式二:直接追加几行
append_with_openpyxl(
[["2026-09-14", "张三", 1200],
["2026-09-14", "李四", 800]],
"./每日台账.xlsx"
)

代码讲解

  • 方式一:先读旧表,再 pd.concat 纵向拼接,列名不一致自动对齐,最后整体重写。适合数据量大、需要自动对齐列的场景。
  • 文件不存在时用 try/except 捕获,直接写新文件,避免首次运行报错。
  • 方式二:用 openpyxlws.append(row) 一行行写,保留原文件格式样式,适合少量追加。
  • 两种方式不要混用,方式一重写整个文件会丢失原有样式,方式二保留样式但慢。

运行结果

运行后 每日台账.xlsx 末尾新增数据行,原有内容完整保留,控制台打印当前总行数。

注意事项

  • 追加前确保目标文件没有被Excel打开,否则写入会报权限错误。
  • pd.concat 方式会重写整个文件,几十万行时偏慢;频繁追加小数据用 openpyxl 方式。
  • 追加前最好先备份,防止脚本写错位置覆盖数据。

Python Excel追加数据到已有表格

标签:

更新时间:2026-09-15 09:19:59

上一篇:Python批量重命名Excel文件:按规则一键整理文件名

下一篇: