python实现对excel的覆盖和追加操作

 更新时间:2026年05月08日 09:07:50   作者:曾阿伦  
这篇文章主要为大家详细介绍了如何使用python实现对excel的覆盖和追加操作,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

在 Python 中处理 Excel 文件时,覆盖写入和追加写入是两种常见需求。通常使用 pandas 结合 openpyxl 或直接使用 openpyxl 来实现。

下面分别给出覆盖写入和追加写入的示例。

一、覆盖写入(清空原文件,写入新数据)

覆盖写入意味着每次运行代码时,都会完全替换原有 Excel 文件中的内容。

1.1 使用 pandas 实现覆盖写入

import pandas as pd
# 创建示例数据
data = {
    '姓名': ['张三', '李四', '王五'],
    '分数': [85, 92, 78]
}
df = pd.DataFrame(data)
# 覆盖写入(如果文件已存在会被覆盖)
df.to_excel('成绩表.xlsx', index=False, sheet_name='Sheet1')
print("覆盖写入完成")

1.2 使用 openpyxl 实现覆盖写入

直接创建新的 Workbook 并保存,会覆盖原有文件。

from openpyxl import Workbook

# 创建新工作簿
wb = Workbook()
ws = wb.active
ws.title = "Sheet1"

# 写入表头和数据
ws.append(['姓名', '分数'])
ws.append(['张三', 85])
ws.append(['李四', 92])
ws.append(['王五', 78])

# 保存(覆盖)
wb.save('成绩表.xlsx')
print("覆盖写入完成")

二、追加写入(保留原数据,在末尾添加新行或新工作表)

追加写入分为两种情况:

  • 在已有工作表末尾追加新行(不覆盖原有数据)
  • 在同一个文件里增加新的工作表

2.1 使用 pandas + openpyxl 在现有工作表末尾追加行

pandas 的 to_excel 默认会覆盖整个文件,要实现追加,需要借助 openpyxl 读取原有数据并合并。

方法一:先读取原有数据,合并后再写入(适合数据量不大的情况)

import pandas as pd
from openpyxl import load_workbook
# 原有文件路径
file_path = '成绩表.xlsx'
# 读取原有数据
try:
    df_old = pd.read_excel(file_path, sheet_name='Sheet1')
except FileNotFoundError:
    df_old = pd.DataFrame(columns=['姓名', '分数'])  # 如果文件不存在则创建空DataFrame
# 新数据
new_data = pd.DataFrame({'姓名': ['赵六', '小明'], '分数': [88, 95]})
# 合并
df_new = pd.concat([df_old, new_data], ignore_index=True)
# 写回文件(覆盖原文件,实际是替换整个内容)
df_new.to_excel(file_path, index=False, sheet_name='Sheet1')
print("追加写入完成")

注意:这种方法本质还是覆盖写入,只是先读取旧数据再和新数据合并后一起写入,适合小文件。

方法二:使用 openpyxl 直接追加(更高效,不会丢失原文件的其他工作表)

from openpyxl import load_workbook

file_path = '成绩表.xlsx'

# 加载工作簿
try:
    wb = load_workbook(file_path)
except FileNotFoundError:
    wb = Workbook()
ws = wb.active
if ws.title != 'Sheet1':
    ws.title = 'Sheet1'

# 追加数据(假设已有表头,直接从下一行开始写)
new_rows = [
    ['赵六', 88],
    ['小明', 95]
]
for row in new_rows:
    ws.append(row)

wb.save(file_path)
print("追加写入完成")

2.2 在现有 Excel 文件中新增工作表(不影响原有工作表)

import pandas as pd
from openpyxl import load_workbook
file_path = '成绩表.xlsx'
# 新数据
df_new_sheet = pd.DataFrame({'科目': ['数学', '语文', '英语'], '成绩': [95, 88, 92]})
# 方法一:使用 pandas 的 ExcelWriter 添加新工作表
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
    df_new_sheet.to_excel(writer, sheet_name='其他科目', index=False)
print("已新增工作表")

注意:mode='a' 表示追加模式,if_sheet_exists='replace' 表示如果同名工作表存在则替换。

三、总结

操作推荐方法特点
覆盖写入pd.DataFrame.to_excel() 或 openpyxl.Workbook().save()最简单,直接替换原文件
追加行openpyxl 的 worksheet.append()不破坏原文件其他内容,性能较好
新增工作表pd.ExcelWriter(mode='a')保留原有工作表,添加新的 Sheet
完整追加(合并)pd.concat() + to_excel()适合少量数据,会重写整个文件

如果需要频繁大量的追加操作,推荐使用 openpyxl 直接操作工作簿,避免反复读写整个文件。

四、方法补充

下面是小编整理的其他python实现对excel的覆盖追加操作的完整代码,感兴趣的可以了解下

from openpyxl import Workbook, load_workbook

# 定义文件名和工作表名
filename = r"C:\Users\Administrator\Downloads\example.xlsx"

# 第一次写入(创建文件并写入两个sheet)
def first_write():
    # 加载或创建新工作簿
    try:
        wb = load_workbook(filename)
    except FileNotFoundError:
        wb = Workbook()
        wb.remove(wb.active)

    # 检查并删除已存在的 "作者" 工作表(如果存在)
    if "机构" in wb.sheetnames:
        del wb["机构"]
    sheet1 = wb.create_sheet("机构")
    for row in data1:
        sheet1.append(row)
    
    # 检查并删除已存在的 "作者" 工作表(覆盖/新建sheet)
    if "作者" in wb.sheetnames:
        del wb["作者"]
    sheet2 = wb.create_sheet("作者")
    for row in data2:
        sheet2.append(row)
    
    wb.save(filename)

# 第二次写入(追加sheet)
def second_write():
    # 加载已存在的文件
    wb = load_workbook(filename)

    # 检查 "作者" 工作表是否存在,如果存在则获取它,否则创建一个新的
    if "作者" in wb.sheetnames:
        sheet2 = wb["作者"]
    else:
        sheet2 = wb.create_sheet("作者")
    for row in data3:
        sheet2.append(row)
    
    wb.save(filename)

# 数据定义
data2 = [
    ['Header1', 'Header2', 'Header3'],
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

data1 = [
    ['Header11', 'Header12', 'Header13'],
    [11, 2, 3],
    [41, 5, 6],
    [71, 8, 9]
]

data3 = [
    [21, 2, 3],
    [42, 5, 6],
    [73, 8, 9]
]

# 执行写入操作
first_write()  # 首次写入
second_write() # 覆盖写入

到此这篇关于python实现对excel的覆盖和追加操作的文章就介绍到这了,更多相关python excel覆盖和追加内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现迷宫自动寻路实例

    Python实现迷宫自动寻路实例

    大家好,本篇文章主要讲的是Python实现迷宫自动寻路实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Python ArcPy实现批量对大量遥感影像相减做差

    Python ArcPy实现批量对大量遥感影像相减做差

    这篇文章主要为大家介绍了如何基于Python中ArcPy模块实现对大量栅格遥感影像文件批量进行相减做差,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-06-06
  • 浅谈Python数学建模之线性规划

    浅谈Python数学建模之线性规划

    线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。研究线性约束条件下线性目标函数的极值问题的数学理论和方法
    2021-06-06
  • keras自定义回调函数查看训练的loss和accuracy方式

    keras自定义回调函数查看训练的loss和accuracy方式

    这篇文章主要介绍了keras自定义回调函数查看训练的loss和accuracy方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python使用webdriver爬取微信公众号

    python使用webdriver爬取微信公众号

    这篇文章主要为大家详细介绍了python使用webdriver爬取微信公众号信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python批量处理图片大小尺寸方法详解

    Python批量处理图片大小尺寸方法详解

    这篇文章主要介绍了用Python批量处理图片大小尺寸的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • Python MySQL如何通过Binlog获取变更记录恢复数据

    Python MySQL如何通过Binlog获取变更记录恢复数据

    本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录,并展示了一个简单的Python脚本,该脚本读取Binlog事件并打印出插入、更新和删除操作的SQL语句,此外,还提到可以使用pandas将结果输出到Excel表格中进行数据分析处理
    2025-01-01
  • 使用Python从Excel文件中自动提取图片的全过程

    使用Python从Excel文件中自动提取图片的全过程

    在日常数据处理工作中,我们常常需要面对包含大量图片的Excel文件,无论是产品目录、员工档案还是资产清单,这些图片往往承载着重要的视觉信息,所以本文将深入探讨如何使用Python与spire.xls for python库,为您提供一个详细、可操作的Excel图片提取教程
    2026-02-02
  • 如何使用pyinstaller打包时引入自己编写的库

    如何使用pyinstaller打包时引入自己编写的库

    这篇文章主要介绍了如何使用pyinstaller打包时引入自己编写的库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Pytorch distributed 多卡并行载入模型操作

    Pytorch distributed 多卡并行载入模型操作

    这篇文章主要介绍了Pytorch distributed 多卡并行载入模型操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论