侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day24 - Python读写Excel文件-1

2026-4-24 / 0 评论 / 1 阅读

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,功能更丰富