Python 办公自动化:Excel 文件处理(上)

Python 读写 Excel 文件(基础篇)

1. Excel 简介与技术选型

Excel 作为全球最流行的电子表格软件,是商业数据处理的通用语言。在 Daoman Python AI 的工程实践中,自动化处理 Excel(如批量生成报表、提取财务数据)能极大地提升生产力。

Python 生态针对不同版本的 Excel 提供了不同的工具链:

  • 传统格式 (.xls):使用 xlrd(读)和 xlwt(写)。这是早期 Excel 97-2003 的标准。
  • 现代格式 (.xlsx):使用 openpyxl。这是基于 Office Open XML 标准的现代格式。
  • 增强工具xlutils 配合上述库实现文件的复制与修改。

环境安装

在终端执行以下命令安装本次所需的库:

pip install xlwt xlrd==1.2.0 xlutils

注意xlrd 最近的版本取消了对 .xlsx 的支持,若需处理旧版 .xls,建议指定安装 1.2.0 版本。


2. 读取 Excel 文件

读取 Excel 的核心逻辑是:打开工作簿 (Workbook) ➔ 定位工作表 (Sheet) ➔ 访问单元格 (Cell)

实战:读取股票数据

import xlrd

# 1. 打开工作簿
wb = xlrd.open_workbook('阿里巴巴2020年股票数据.xls')

# 2. 获取所有表单名称并定位第一个表单
sheet_names = wb.sheet_names()
sheet = wb.sheet_by_name(sheet_names[0])

# 3. 遍历行与列
print(f"表格共 {sheet.nrows} 行, {sheet.ncols} 列")

for row in range(sheet.nrows):
    for col in range(sheet.ncols):
        # 获取单元格对象及其数值
        cell = sheet.cell(row, col)
        value = cell.value
        
        # 特殊处理:日期格式转换
        if row > 0 and col == 0:
            # xldate_as_tuple 将 Excel 内部数值转为日期元组
            date_tuple = xlrd.xldate_as_tuple(value, 0)
            value = f'{date_tuple[0]}{date_tuple[1]:02d}{date_tuple[2]:02d}日'
            
        print(value, end='\t')
    print()

3. 写入 Excel 文件

写入流程通过 xlwt.Workbook 对象开启。

import xlwt
import random

# 1. 创建工作簿与工作表
wb = xlwt.Workbook()
sheet = wb.add_sheet('成绩单')

# 2. 写入表头
titles = ('姓名', '语文', '数学', '英语')
for i, title in enumerate(titles):
    sheet.write(0, i, title)

# 3. 写入模拟数据
names = ['关羽', '张飞', '赵云', '马超', '黄忠']
for row, name in enumerate(names, start=1):
    sheet.write(row, 0, name)
    for col in range(1, 4):
        sheet.write(row, col, random.randint(60, 100))

# 4. 保存文件
wb.save('考试成绩表.xls')

4. 调整单元格样式

为了让导出的报表更具专业感,我们需要设置字体、对齐方式及背景色。

样式设置核心步骤:

  1. 创建 XFStyle 对象。
  2. 配置子对象:Font (字体), Alignment (对齐), Pattern (图案/背景), Borders (边框)。
  3. write 时传入样式对象。
style = xlwt.XFStyle()

# 设置字体
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.height = 20 * 12  # 12pt
style.font = font

# 设置居中对齐
align = xlwt.Alignment()
align.horz = xlwt.Alignment.HORZ_CENTER
align.vert = xlwt.Alignment.VERT_CENTER
style.alignment = align

# 应用样式写入
sheet.write(0, 0, '加粗居中标题', style)

5. 公式计算与文件修改

xlwt 本身不支持修改现有文件。如果需要打开一个 Excel,计算后再保存,必须借助 xlutils.copy

from xlutils.copy import copy
import xlrd
import xlwt

# 读取原文件
rb = xlrd.open_workbook('数据源.xls')
# 复制为可写对象
wb = copy(rb)
sheet = wb.get_sheet(0)

# 写入 Excel 公式 (计算 E2 到 E10 的平均值)
sheet.write(10, 4, xlwt.Formula('AVERAGE(E2:E10)'))

wb.save('汇总报告.xls')

总结

  • 读操作:重点在于处理 Excel 特有的日期类型转换。
  • 写操作:通过样式类(Font, Alignment 等)提升报表美观度。
  • 修改操作:必须经历 xlrd 读取 ➔ copy 复制 ➔ xlwt 写入的过程。

在处理大规模、高维度的表格数据时,建议关注后续章节关于 Pandas 的内容,它能以更高效的方式处理 Excel 数据流。