Python中使用第三方库xlutils实现Excel追加写入

青禾
青禾
发布时间:2026-10-12 | 3人浏览过
原创

针对Python原生库难以直接修改已有Excel文件的限制,本文介绍基于第三方组件xlutils与xlrd的替代方案。通过读取原表总行数定位空白区,复制工作表结构后逐列填入新数据,最终另存为新文档。方法简单稳定,适用于历史表格的增量维护。

实现原理与风险提醒

现有Python标准库对直接定位并修改封闭的Excel文件支持较弱。采用xlutils的核心思路是“读取 → 复制 → 覆写 → 另存”。该方案会在内存中生成原始表格的副本,避免直接操作导致源文件损坏。由于该组合主要面向早期.xls格式优化,若您的文件为新版.xlsx格式,建议在运行前转换为兼容格式,或考虑使用openpyxl/pandas等现代组件。

在涉及数据写入与覆盖操作前,务必备份原始Excel文件,防止因编码冲突或版本不匹配导致内容丢失。

第1步:安装依赖与创建项目目录

本方案依赖xlrd读取权限控制与xlutils的写入能力。通过包管理器完成环境初始化:

pip install xlrd xlutils

完成后准备一份待追加的Excel测试文件(例如./test_append.xls),确保文件未被其他程序独占锁定。

第2步:读取原表并计算目标行号

使用xlrd打开工作簿,提取第一个工作表的物理行数。该行索引即为新数据应写入的起始坐标:

import os
from xlutils.copy import copy
import xlrd

def write_append(file_name):
    # 待追加的一行数据,可根据实际列数调整
    values = ["Ann", "woman", 22, "UK"]

    # 1. 加载原表并获取sheet元信息
    r_xls = xlrd.open_workbook(file_name)
    r_sheet = r_xls.sheet_by_index(0)
    target_row = r_sheet.nrows  # 当前最后一行的下一行

第3步:复制工作表并逐列写入新数据

借助xlutils.copy生成可编辑的工作簿对象,通过get_sheet()获取句柄后,按行列坐标写入内容:

    # 2. 深度复制工作簿以便后续修改
    w_xls = copy(r_xls)
    sheet_write = w_xls.get_sheet(0)

    # 3. 遍历数据列表,写入指定行
    for col_idx, val in enumerate(values):
        sheet_write.write(target_row, col_idx, val)

此步骤仅改变内存对象,尚未落盘,所有参数均可在保存前校验。

第4步:安全保存并验证输出结果

为避免意外覆盖源文件,推荐添加独立后缀命名输出路径,执行保存命令后即可确认追加效果:

    # 4. 构造新文件名并保存
    out_name = f"{os.path.splitext(file_name)[0]}.out{os.path.splitext(file_name)[1]}"
    w_xls.save(out_name)
    return out_name

if __name__ == "__main__":
    dest = write_append("./test_append.xls")
    print(f"追加成功,已生成:{dest}")

常见运行异常与排错

  • 文件被占用报错:Windows下Excel打开状态会锁定文件句柄。请先关闭对应表格窗口,或在非活跃进程中运行脚本。
  • 样式或公式丢失:该流程侧重于数值与文本追加,不会迁移图表、超链接及复杂嵌套公式。如需保留完整排版,建议开启xlrd.open_workbook(..., formatting_info=True)。
  • 列宽不对齐:写入新单元格后,可通过Excel手动拖拽标尺调整列宽,或改用具备样式继承能力的现代库。

结果对照

执行上述逻辑后,原表末尾将增加一行记录。以默认测试数据为例:

  • 追写前数据:共3行主体记录
  • 追写后数据:末尾新增Ann | woman | 22 | UK,总计4行有效数据

简要总结

利用xlutils配合xlrd能够以极小的代码量完成旧版Excel的增量更新。掌握行数计算、副本复制与定向写入三板斧,即可灵活对接各类日志汇总、报表累加场景。以上就是使用xlutils实现Excel文件追加写入的详细内容,更多关于Python数据处理与自动化办公的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表