在日常工作中,Excel 永远是我们最亲密的“表格伙伴”。但当数据量暴增、报表模板增多、重复操作成为噩梦时,你会想:有没有办法让 Python 替我点鼠标?
答案是:有!本文带你 5 分钟上手 Python-Excel 自动化:从安装、读写到样式、图表、大数据,一站式打通。


一、武器库总览

库名 擅长场景 速度 备注
pandas 读/写/分析二维表,一行搞定 ★★★★ 依赖引擎,简单易用
openpyxl .xlsx 读写、样式、公式、图表 ★★★ 纯 Python,无依赖
xlsxwriter 创建精美报表、复杂格式 ★★★ 只能写,不能读
xlrd/xlwt 老 .xls 兼容 ★★ 已停止更新
pywin32 直接调用 Windows Excel COM ★★★★ 仅 Windows,可操控界面

一句话总结:

  • 读表 + 数据分析pandas
  • 写模板 + 样式openpyxl / xlsxwriter
  • 超大文件pandas + pyarrow(.xlsx 太慢就转 CSV/Parquet)

二、环境安装(30 秒)

# 推荐一次性装齐
pip install pandas openpyxl xlsxwriter xlrd

三、快速上手 3 连击

1️⃣ 读取 Excel → DataFrame

import pandas as pd
df = pd.read_excel('销售数据.xlsx', sheet_name='2024-05')
print(df.head())

2️⃣ 处理数据

# 新增一列
df['利润'] = df['销售额'] - df['成本']
summary = df.groupby('城市')['利润'].sum()

3️⃣ 写回 Excel(带样式)

with pd.ExcelWriter('结果.xlsx', engine='xlsxwriter') as writer:
    summary.to_excel(writer, sheet_name='利润汇总')
    workbook  = writer.book
    worksheet = writer.sheets['利润汇总']
    # 加粗表头
    bold = workbook.add_format({'bold': True})
    worksheet.set_row(0, None, bold)
    # 添加图表
    chart = workbook.add_chart({'type':'column'})
    chart.add_series({
        'categories': ['利润汇总', 1, 0, len(summary), 0],
        'values':     ['利润汇总', 1, 1, len(summary), 1],
    })
    worksheet.insert_chart('D2', chart)
print('Done!')

👉 运行后打开 结果.xlsx,图表、格式一步到位!


四、进阶招式

① openpyxl 精修样式

from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill

wb = load_workbook('结果.xlsx')
ws = wb['利润汇总']
header_font = Font(bold=True, color='FFFFFF')
fill = PatternFill('solid', fgColor='4F81BD')
for cell in ws[1]:
    cell.font = header_font
    cell.fill = fill
wb.save('结果_精修.xlsx')

② 批量拆分工作表

for city, sub in df.groupby('城市'):
    sub.to_excel(f'{city}.xlsx', index=False)

③ 大文件极速读写

# 读取 100 万行不卡死
df = pd.read_excel('big.xlsx', engine='openpyxl', usecols=['订单号', '金额'])

# 写入加速(xlsxwriter)
df.to_excel('big_out.xlsx', engine='xlsxwriter', index=False)

五、常见坑 & 解决方案

问题 解决口诀
xlrd.xlsx 不支持 安装 openpyxl 引擎:read_excel(..., engine='openpyxl')
日期变成 44205 数字 df['日期'] = pd.to_datetime(df['日期'])
合并单元格导致读取错位 read_excel(..., skiprows=[0]) 跳过表头
多线程并发写同一文件失败 先写到不同临时文件,再合并

六、实战案例:日报自动化

需求:每天 8:00 自动抓取 MySQL → 生成 Excel → 邮件发送
核心代码片段:

import pandas as pd
import sqlalchemy, datetime, smtplib

today = datetime.date.today()
sql = f"SELECT * FROM sales WHERE date='{today}'"
df = pd.read_sql(sql, sqlalchemy.create_engine('mysql+pymysql://user:pwd@host/db'))

file = f'日报_{today}.xlsx'
df.to_excel(file, index=False)

# 邮件发送(略)

七、一句话总结

Python 操作 Excel 就是:
读取用 pandas,样式用 openpyxl / xlsxwriter,大数据用引擎加速,复杂逻辑用循环模板。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐