什么是 xlutils?
xlutils 是一个 Python 库,它不是用来直接创建或写入 Excel 文件的,它的核心作用是结合 xlrd 和 xlwt 库,提供对现有 Excel 文件(.xls 格式)进行读取、修改和写入的功能。

xlrd: 读取 Excel 文件(.xls)。xlwt: 写入 Excel 文件(.xls)。xlutils: 连接xlrd和xlwt,让你可以在读取一个文件后,对其进行修改,然后保存为新文件或覆盖原文件。
重要提示:xlutils 主要支持旧版的 .xls 文件格式,对于新版 .xlsx 文件,推荐使用更现代的库,如 openpyxl 或 pandas。
如何安装 xlutils?
xlutils 的安装非常简单,通常使用 pip 包管理器即可,由于它依赖于 xlrd 和 xlwt,一个常见的做法是同时安装这三个库,以避免潜在的依赖问题。
推荐的安装命令(一次性安装所有依赖)
在您的终端或命令行中运行以下命令:
pip install xlutils
这个命令会自动安装 xlutils 以及它所依赖的 xlrd 和 xlwt。

分步安装(可选)
如果你想更明确地控制安装过程,也可以分别安装:
# 1. 安装 xlutils pip install xlutils # 2. (可选) 如果上面的命令没有自动安装依赖,可以手动安装 pip install xlrd pip install xlwt
验证安装
安装完成后,你可以在 Python 环境中尝试导入这些库来验证安装是否成功:
import xlrd
import xlwt
from xlutils import copy
print("xlrd, xlwt, and xlutils are installed successfully!")
如果没有报错,说明安装成功。
基本使用示例
xlutils 最常用的功能是复制一个工作簿,然后修改其中的内容,核心函数是 copy.copy() 和 copy.copy()。
下面是一个完整的示例,演示如何读取一个现有的 Excel 文件,修改其中的一个单元格,然后保存为新文件。
准备工作:创建一个示例 Excel 文件
我们创建一个名为 original.xls 的文件,内容如下:
| A | B | |
|---|---|---|
| 1 | Name | Score |
| 2 | Alice | 85 |
| 3 | Bob | 92 |
| 4 | Charlie | 78 |
Python 代码示例
import xlrd
from xlutils import copy
import os
# 1. 打开一个已存在的 Excel 文件 (使用 xlrd)
# 注意:xlrd.open_workbook() 以只读模式打开
rb = xlrd.open_workbook('original.xls')
# 2. 使用 xlutils.copy 复制这个工作簿
# 复制后,你可以对新的工作簿进行修改
# wb 是一个 xlwt.Workbook 对象,可以进行写入操作
wb = copy.copy(rb)
# 3. 获取第一个工作表 (sheet)
# 复制后的工作簿对象可以通过 sheet_by_index 获取工作表
sheet = wb.get_sheet(0) # 或者 wb.sheet_by_index(0)
# 4. 修改指定单元格的值
# xlutils 的行列索引是从 0 开始的
# B2 单元格是 (行1, 列1)
sheet.write(1, 1, 95) # 将 B2 单元格的值从 85 改为 95
# 5. 将修改后的工作簿保存为新文件
# 注意:必须使用 .xls 作为扩展名
wb.save('modified.xls')
print("文件修改成功,已保存为 modified.xls")
# (可选) 演示如何追加数据
# 再次复制原始文件
wb_add = copy.copy(rb)
sheet_add = wb_add.get_sheet(0)
# 在最后一行追加新数据
# 先获取当前行数
last_row = sheet_add.nrows
sheet_add.write(last_row, 0, 'David') # A列
sheet_add.write(last_row, 1, 88) # B列
# 保存追加后的文件
wb_add.save('appended.xls')
print("数据追加成功,已保存为 appended.xls")
运行上述代码后,你会得到两个新文件:
modified.xls: B2 单元格的值变为 95。appended.xls: 在原始数据下方增加了一行 "David, 88"。
重要注意事项
-
仅支持
.xls格式:xlutils无法直接处理.xlsx文件,如果你需要操作.xlsx文件,请使用openpyxl库。 -
文件覆盖风险:
wb.save()会直接覆盖同名文件,在执行保存操作前,最好确保文件名是正确的,或者先备份原始文件。 -
库的更新状态:
xlrd从 2.0 版本开始,移除了对.xlsx文件的支持,如果你主要处理.xlsx文件,xlutils+xlrd的组合就不是最佳选择。xlwt也已经停止更新,对于新项目,强烈推荐使用openpyxl或pandas。
xlutils vs. openpyxl (现代替代方案)
| 特性 | xlutils |
openpyxl |
|---|---|---|
| 支持的格式 | 仅 .xls |
.xlsx (推荐), .xls |
| 读写能力 | 读取 (xlrd) + 写入 (xlwt) |
读取和写入 |
| API 风格 | 相对底层,需要手动复制工作簿 | 更直观,可以直接操作工作簿、工作表、单元格 |
| 社区支持 | 较弱,基本不再更新 | 非常活跃,是处理 Excel 文件的主流选择 |
| 适用场景 | 维护旧项目,处理大量旧的 .xls 文件 |
新项目,处理现代 .xlsx 文件 |
openpyxl 简单示例(对比)
from openpyxl import load_workbook
# 1. 加载一个 .xlsx 文件
wb = load_workbook('data.xlsx') # load_workbook 会保持文件打开,以便修改
# 2. 选择活动工作表
ws = wb.active
# 3. 直接修改单元格值
ws['B2'] = 95 # 直接使用单元格地址,非常方便
# 4. 保存(会自动覆盖原文件)
wb.save('data_modified.xlsx')
print("使用 openpyxl 修改成功!")
- 安装:
pip install xlutils - 用途:专门用于修改已存在的
.xls文件。 - 核心方法:
from xlutils import copywb = copy.copy(rb)。 - 局限性:仅支持旧版
.xls格式,库已不再更新。 - 现代选择:对于新的
.xlsx文件处理,请使用openpyxl或pandas。
