Excel 文件读写(一)
库选择
| 格式 | 推荐库 |
|---|---|
.xls(旧版) |
xlrd 读 + xlwt 写 |
.xlsx(新版) |
openpyxl |
| 数据分析 | pandas(推荐) |
pip install xlrd xlwt xlutils # 旧格式
pip install openpyxl # 新格式
xlrd 读取旧版 Excel
import xlrd
wb = xlrd.open_workbook('data.xls')
print(wb.sheet_names()) # 所有工作表名
sheet = wb.sheet_by_index(0) # 按索引获取工作表
# sheet = wb.sheet_by_name('Sheet1') # 按名称获取
print(sheet.nrows, sheet.ncols) # 行数、列数
# 读取单元格
for row in range(sheet.nrows):
for col in range(sheet.ncols):
value = sheet.cell(row, col).value
print(value, end='\t')
print()
# 读取整行/整列
print(sheet.row_values(0)) # 第一行
print(sheet.col_values(0)) # 第一列
日期处理:
import xlrd
# xldate 转 Python 日期
date_tuple = xlrd.xldate_as_tuple(value, 0) # 0=1900基准, 1=1904基准
formatted = f'{date_tuple[0]}年{date_tuple[1]:02d}月{date_tuple[2]:02d}日'
xlwt 写入旧版 Excel
import xlwt
wb = xlwt.Workbook()
sheet = wb.add_sheet('成绩单')
# 写入数据
headers = ['姓名', '语文', '数学', '英语']
for col, header in enumerate(headers):
sheet.write(0, col, header) # 行, 列, 值
data = [('Alice', 92, 88, 95), ('Bob', 78, 82, 90)]
for row_idx, row_data in enumerate(data, start=1):
for col_idx, val in enumerate(row_data):
sheet.write(row_idx, col_idx, val)
wb.save('scores.xls')
设置单元格样式
import xlwt
style = xlwt.XFStyle()
# 字体
font = xlwt.Font()
font.name = 'Arial'
font.bold = True
font.height = 20 * 16
style.font = font
# 对齐(垂直+水平居中)
align = xlwt.Alignment()
align.vert = xlwt.Alignment.VERT_CENTER
align.horz = xlwt.Alignment.HORZ_CENTER
style.alignment = align
# 背景色(5=黄色)
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 5
style.pattern = pattern
# 写入时应用样式
sheet.write(0, 0, '标题', style)
设置列宽和行高
# 列宽(单位:1/256字符宽度)
sheet.col(0).width = 20 * 200
# 行高
sheet.row(0).set_style(xlwt.easyxf('font:height 600'))
写入公式
import xlwt
sheet.write(nrows, 4, xlwt.Formula(f'average(E2:E{nrows})'))
sheet.write(nrows, 6, xlwt.Formula(f'sum(G2:G{nrows})'))
xlutils 复制并修改
from xlutils.copy import copy
wb = copy(xlrd.open_workbook('original.xls')) # 复制只读工作簿
sheet = wb.get_sheet(0)
sheet.write(0, 0, '新内容')
wb.save('modified.xls')
总结
xlrd:读取.xls文件,获取单元格值、行列表格数据xlwt:写入.xls文件,支持字体/对齐/背景等样式xlutils.copy:将xlrd读取的 Workbook 复制为可写对象- 新版
.xlsx推荐使用openpyxl,功能更丰富