Python如何使用xlrd和xlwt库读写Excel文件
本文详解如何在 Python 中使用 xlrd 与 xlwt 库读取和写入 Excel 文件。通过实例演示如何遍历工作表、提取单元格数值、动态追加统计列,并最终将处理后的数据导出为新文件。文章特别指出了库版本兼容性限制及格式注意事项,适用于传统 .xls 格式数据的批量处理。
环境安装与格式兼容性说明
在使用这两个库前,需了解它们的设计定位:xlrd 专用于读取,xlwt 专用于写入。两者均仅支持旧版 .xls 格式。
注意:xlrd 自 2.0.0 版本起移除了对 .xlsx 的支持。如果你的目标文件是新版 Excel,请卸载当前版本并回退至 1.2.0,或直接更换为支持 .xlsx 的 openpyxl 库。
执行以下命令完成安装:
pip3 install xlrd==1.2.0 xlwt
读取与写入的基础操作
xlrd 的工作流基于工作簿(Book)与工作表(Sheet)层级。读取时,系统返回包含多个 Sheet 对象的集合。通过索引或名称可定位目标表,进而获取行列数量及单元格详情。
xlwt 的操作则相反,需先实例化一个空白 WorkBook,创建对应的 Sheet,随后通过坐标逐格写入文本、数字或设定样式。
以下为读取与写入的核心 API 演示:
import xlrd, xlwt
# ----------------------
# 1. 读取操作 (xlrd)
# ----------------------
# 打开指定路径的 xls 文件
book = xlrd.open_workbook('demo.xls')
# 获取所有工作表,并通过索引定位到第一张表
sheet = book.sheet_by_index(0)
# 获取总行数与总列数
r_num, c_num = sheet.nrows, sheet.ncols
# 获取指定行列的单元格对象及其内容类型、值
print(f"单元格类型: {sheet.cell(0, 0).ctype}")
print(f"单元格数值: {sheet.cell(0, 0).value}")
# 高效方法:一次性获取某一行或某一列的数据列表
row_data = sheet.row_values(1) # 跳过表头取第一行数据
col_data = sheet.col_values(1) # 获取第二列数据
# ----------------------
# 2. 写入操作 (xlwt)
# ----------------------
# 初始化一个新的工作簿并添加工作表
w_book = xlwt.Workbook()
w_sheet = w_book.add_sheet('sheet1')
# 向指定位置写入内容,支持传入对齐样式对象
style = xlwt.easyxf('font: name Arial; align: horizontal center')
w_sheet.write(0, 0, 'Hello', style)
# 将内存中的数据持久化到硬盘
w_book.save('output.xls')
实战:遍历表格自动计算并导出总分
在实际办公场景中,常需对已有成绩表进行批处理。下面演示如何读取原始成绩,在内存中动态插入“总分”列,计算每名学生语数外三科之和,最后生成独立的新文件。
风险提示:涉及文件覆盖操作前,建议提前备份原始数据。
- 读取源文件与定位表结构:打开
demo.xls,获取行数nrows和列数ncols。 - 注入表头与计算循环:利用
put_cell在原始表的尾部强行追加“总分”列名。随后迭代数据行,使用切片row_values(row, 1)排除姓名列,调用内置sum()求和后,再次通过put_cell填入对应单元格的数值。 - 格式化重建并导出:虽然可直接读取修改后的内存表,但推荐使用
wt.Workbook()独立生成干净的结构。遍历原表行列,配合easyxf统一设置水平垂直居中样式,最终调用save()输出。
import xlrd, xlwt
# --- 第一步:打开源文件 ---
r_book = xlrd.open_workbook('demo.xls')
r_sheet = r_book.sheet_by_index(0)
total_cols = r_sheet.ncols
# --- 第二步:内存中动态追加计算列 ---
# 在最后一列写入列名
r_sheet.put_cell(0, total_cols, xlrd.XL_CELL_TEXT, '总分', None)
# 跳过表头(第0行),逐行计算
for row_idx in range(1, r_sheet.nrows):
# 从第1列(语文)开始取值并求和
score_sum = sum(r_sheet.row_values(row_idx, 1))
# 写入总分数值
r_sheet.put_cell(row_idx, total_cols, xlrd.XL_CELL_NUMBER, score_sum, None)
# --- 第三步:新建文件并应用排版后保存 ---
w_book = xlwt.Workbook()
w_sheet = w_book.add_sheet(r_sheet.name)
# 定义居中对齐样式
style = xlwt.easyxf('align: vertical center, horizontal center')
# 遍历整表,将内容与样式复制到新书表中
for r in range(r_sheet.nrows):
for c in range(total_cols):
val = r_sheet.cell_value(r, c)
w_sheet.write(r, c, val, style)
w_book.save('output_with_total.xls')
排错与优化建议
- TypeError: 'tuple' object doesn't support item assignment:
xls工作表本身默认为只读。必须通过put_cell()在底层数据结构插补缺省节点,而非直接赋值修改单元格。 - 中文乱码问题:若原始表格包含中文字符,确保脚本运行环境编码一致。通常在 Windows 下打开时需注意 ANSI 编码适配。
- 性能瓶颈:对于上万行的超大数据集,
xlwt/xlrd速度较慢且易引发内存溢出,此时应切换到基于 XML 解析的pandas或openpyxl。
总结
通过掌握上述步骤,您可以熟练运用 Python 脚本完成传统 Office 电子表格的抓取与二次加工。对于常规的小型表格自动化任务,本方案提供了轻量级且无需额外数据库支持的实现路径。以上就是Python如何使用xlrd和xlwt库读写excel文件的详细内容,更多关于Excel自动化处理与Python办公效率提升的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













