当前位置:首页 > Python > 正文

Python使用xlutils追写Excel数据教程 - 详解追加写入xls文件

Python使用xlutils追写Excel数据教程

详解如何追加数据到现有Excel文件的方法

什么是xlutils?

xlutils是一个Python库,提供了一系列实用工具用于处理Excel文件(.xls格式)。它建立在xlrd(读取Excel)和xlwt(写入Excel)库之上,主要功能包括:

  • 复制和修改现有的Excel文件
  • 在不同Excel文件之间复制数据
  • 过滤和转换Excel数据
  • 在现有Excel文件中追加数据
注意: xlutils主要支持.xls格式(Excel 97-2003),对于.xlsx格式(Excel 2007+)建议使用openpyxl库。

安装所需库

使用前需要安装以下库:

pip install xlutils xlrd xlwt

这三个库分别提供以下功能:

  • xlrd:读取Excel文件
  • xlwt:创建和写入Excel文件
  • xlutils:提供高级功能(如追加数据)

追写Excel数据完整示例

以下是一个完整的代码示例,演示如何向现有Excel文件追加数据:

步骤 1: 导入所需库

from xlutils.copy import copy
import xlrd

步骤 2: 打开现有Excel文件

# 打开原始Excel文件
workbook = xlrd.open_workbook('原始数据.xls', formatting_info=True)

# 创建可写副本
workbook_copy = copy(workbook)

步骤 3: 获取工作表并确定最后一行

# 选择要操作的工作表(索引0表示第一个工作表)
sheet_index = 0
original_sheet = workbook.sheet_by_index(sheet_index)
copy_sheet = workbook_copy.get_sheet(sheet_index)

# 确定当前最后一行
last_row = original_sheet.nrows

步骤 4: 追加新数据

# 要追加的数据(二维列表)
new_data = [
    ['张三', 28, '销售部', 'zhangsan@example.com'],
    ['李四', 32, '技术部', 'lisi@example.com'],
    ['王五', 25, '市场部', 'wangwu@example.com']
]

# 从最后一行之后开始写入新数据
for row_idx, row_data in enumerate(new_data):
    for col_idx, cell_value in enumerate(row_data):
        copy_sheet.write(last_row + row_idx, col_idx, cell_value)

步骤 5: 保存修改后的文件

# 保存为新文件(避免覆盖原始文件)
workbook_copy.save('追加数据后的文件.xls')

完整代码示例

下面是追加数据的完整代码:

from xlutils.copy import copy
import xlrd

def append_to_excel(original_file, new_file, sheet_index=0, new_data=[]):
    """
    向Excel文件追加数据
    
    参数:
        original_file (str): 原始Excel文件路径
        new_file (str): 保存的新文件路径
        sheet_index (int): 要操作的工作表索引
        new_data (list): 要追加的数据(二维列表)
    """
    # 打开原始文件
    workbook = xlrd.open_workbook(original_file, formatting_info=True)
    workbook_copy = copy(workbook)
    
    # 获取工作表
    original_sheet = workbook.sheet_by_index(sheet_index)
    copy_sheet = workbook_copy.get_sheet(sheet_index)
    
    # 获取当前最后一行
    last_row = original_sheet.nrows
    
    # 追加新数据
    for row_idx, row_data in enumerate(new_data):
        for col_idx, cell_value in enumerate(row_data):
            copy_sheet.write(last_row + row_idx, col_idx, cell_value)
    
    # 保存新文件
    workbook_copy.save(new_file)
    print(f"成功追加 {len(new_data)} 行数据到 {new_file}")

# 示例使用
if __name__ == "__main__":
    # 原始Excel文件
    input_file = 'employee_data.xls'
    
    # 新Excel文件
    output_file = 'updated_employee_data.xls'
    
    # 要追加的数据
    new_employees = [
        ['张三', 28, '销售部', 'zhangsan@example.com'],
        ['李四', 32, '技术部', 'lisi@example.com'],
        ['王五', 25, '市场部', 'wangwu@example.com'],
        ['赵六', 30, '财务部', 'zhaoliu@example.com'],
        ['钱七', 27, '人力资源部', 'qianqi@example.com']
    ]
    
    # 执行追加操作
    append_to_excel(input_file, output_file, 0, new_employees)

追加数据前后的Excel对比

原始数据

姓名 年龄 部门 邮箱
王明 35 技术部 wangming@example.com
李红 28 市场部 lihong@example.com

追加数据后

姓名 年龄 部门 邮箱
王明 35 技术部 wangming@example.com
李红 28 市场部 lihong@example.com
张三 28 销售部 zhangsan@example.com
李四 32 技术部 lisi@example.com
王五 25 市场部 wangwu@example.com

注意事项与最佳实践

文件格式限制

xlutils只支持.xls格式(Excel 97-2003)。如果需要处理.xlsx文件,请使用openpyxl或pandas库。

样式保留问题

使用copy函数时设置formatting_info=True可以保留原始格式,但部分复杂格式可能无法完美保留。

大数据集处理

处理大型Excel文件时,考虑分块处理或使用更高效的库如pandas,避免内存不足问题。

文件保存

始终保存到新文件而不是覆盖原始文件,这样可以在出错时保留原始数据。

高级技巧

  • 使用sheet.nrowssheet.ncols获取行数和列数
  • 通过sheet.cell_value(row, col)读取特定单元格的值
  • 使用xlwt.easyxf()创建样式应用于新写入的单元格
  • 处理多个工作表时,使用workbook.sheet_names()获取所有工作表名称

本教程提供了使用Python xlutils库追写Excel数据的完整指南。通过上述方法,您可以轻松地向现有Excel文件添加新数据而不会丢失原有内容。

发表评论