Python读写Excel文件 2
基础教学 1 min read

Python读写Excel文件 2

Blog Author

Python 读写 Excel 文件(二):openpyxl 教学与实战指南


📘 一、openpyxl 操作 Excel 的意义与应用场景

✅ 为什么要用 Python 操作 Excel?

在日常办公、数据报表、教育、科研、财务、业务系统等场景中,经常需要批量处理 Excel 文件,例如:

  • 自动化生成成绩单、工资单、进度表。
  • 汇总多个部门的 Excel 表格。
  • 从报表中提取特定信息,如“所有销售额大于 1 万的记录”。
  • 将数据库或 API 的数据导出为 Excel。
  • 动态生成带图表、公式、格式的专业文档。

openpyxl 是处理 .xlsx 文件的主流 Python 库,支持读取、修改、写入、格式设置、公式与图表,是办公自动化与数据分析中不可或缺的工具。


🛠️ 二、openpyxl 基础操作教学

1️⃣ 安装 openpyxl

pip install openpyxl

📂 三、读取 Excel 文件的实用方式

示例代码讲解:

import openpyxl


# 加载现有 Excel 工作簿
wb = openpyxl.load_workbook('阿里巴巴2020年股票数据.xlsx')


# 获取工作表
sheet = wb.active  # 或用 wb['Sheet名称']


# 读取特定单元格
print(sheet['C3'].value)


# 遍历所有单元格数据
for row in sheet.iter_rows(min_row=2, values_only=True):
    print(row)

教学提示:

  • sheet['C3'] 是使用 Excel 坐标定位。
  • sheet.cell(3, 3) 是用数字索引,注意从 1 开始。
  • iter_rows() 是处理大表格的最佳实践,values_only=True 直接返回值。

✍️ 四、写入 Excel 文件的正确流程

示例代码:

import openpyxl
import random


# 创建新工作簿和工作表
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = '期末成绩'


# 写入表头
headers = ['姓名', '语文', '数学', '英语']
sheet.append(headers)


# 写入学生数据
students = ['关羽', '张飞', '赵云', '马超', '黄忠']
for name in students:
    scores = [random.randint(50, 100) for _ in range(3)]
    sheet.append([name] + scores)


wb.save('考试成绩表.xlsx')

最佳实践建议:

  • 使用 sheet.append() 写入整行更简洁。
  • 随机数生成常用于模拟数据。
  • 保证标题行总是第一行,以便后续处理(如图表或筛选)。

🎨 五、单元格样式与公式应用

示例代码:

from openpyxl.styles import Font, Alignment, Border, Side


wb = openpyxl.load_workbook('考试成绩表.xlsx')
sheet = wb.active


# 设置表头样式
sheet['E1'] = '平均分'
sheet['E1'].font = Font(size=14, bold=True, color='FF0000')
sheet['E1'].alignment = Alignment(horizontal='center')
sheet['E1'].border = Border(
    left=Side(style='thin'), right=Side(style='thin'),
    top=Side(style='thin'), bottom=Side(style='thin')
)


# 插入公式
for row in range(2, 7):
    sheet[f'E{row}'] = f'=AVERAGE(B{row}:D{row})'


wb.save('考试成绩表.xlsx')

核心知识点:

  • 样式对象不可复用,需单独设置。
  • 公式可直接写入字符串,Excel 会自动计算。
  • 结合颜色、字体和对齐方式可以让输出更美观。

📊 六、插入统计图表(柱状图)

示例代码:

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference


wb = Workbook()
sheet = wb.active


data = [
    ['类别', '销售A组', '销售B组'],
    ['手机', 40, 30],
    ['平板', 50, 60],
    ['笔记本', 80, 70],
    ['外设', 20, 10],
]


for row in data:
    sheet.append(row)


# 创建柱状图
chart = BarChart()
chart.title = '销售统计图'
chart.x_axis.title = '产品类别'
chart.y_axis.title = '销量'


data_ref = Reference(sheet, min_col=2, max_col=3, min_row=1, max_row=5)
cat_ref = Reference(sheet, min_col=1, min_row=2, max_row=5)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cat_ref)
sheet.add_chart(chart, "E2")


wb.save('销售图表.xlsx')

教学说明:

  • 使用 Reference 来绑定数据和类别。
  • 图表插入位置如 'E2',支持指定到任意位置。
  • 图表类型还支持折线图、饼图、雷达图等。

✅ 七、常见实战案例

场景 用法
多文件汇总 openpyxl.load_workbook() 读取多个文件合并
数据报表自动生成 配合随机数、公式与样式
周报自动填充 模板复制 + 数据绑定
图表自动汇总 add_chart() 添加每周销售图表
数据可视化输出 将 pandas 数据透视表导出至 Excel

📚 八、最佳实践与注意事项

  1. 避免频繁写入磁盘:所有操作尽量在内存中完成后一次性保存。
  2. 优先使用 iter_rows()iter_cols():性能更高。
  3. 明确工作簿与工作表对象分离:避免混淆 wb.activewb[sheetname]
  4. 慎用公式引用:跨文件或跨工作表引用需额外处理。
  5. 读写模式区分:若仅写入建议使用 Workbook(write_only=True)

🧠 九、进阶推荐

对于更大数据量、更复杂逻辑:

  • 使用 pandas + openpyxl 组合导出。
  • xlsxwriter:更高性能写入支持。
  • ExcelWriter:pandas 接口更方便处理多个 sheet。

🧾 十、小结

openpyxl 是处理 .xlsx 文件的核心利器。通过本文你应已掌握:

✅ 读取与写入 Excel 表格 ✅ 设置样式、插入公式 ✅ 自动化生成图表 ✅ 应对常见办公场景

在自动化、可视化、动态报表等方面,Python + Excel 的组合仍然是最具实用价值的工具之一。


如需进一步结合 pandas 使用,请继续学习下一章:《Python 与 pandas 高效处理 Excel 文件》。