为什么要学Python自动化Excel

工作中 70% 的人都涉及 Excel,但很多人还在用复制粘贴、手动改格式、人工汇总数据。Python openpyxl 让你用代码一次性处理几十、几百个 Excel 文件,处理速度是人工的 50-100 倍。一次学会终身受益。

第一步:环境准备

需要:

  • Python 3.8+
  • openpyxl 库(专门读写 .xlsx)
  • IDE——VSCode 或 PyCharm

安装:

pip install openpyxl

第二步:打开第一个文件

from openpyxl import load_workbook

wb = load_workbook(‘员工名单.xlsx’)
print(wb.sheetnames) # [‘Sheet1’, ‘Sheet2’]

ws = wb[‘Sheet1’]
print(ws[‘A1’].value) # ‘姓名’
print(ws[‘A2’].value) # ‘张三’

print(ws.max_row) # 最大行号
print(ws.max_column) # 最大列号

第三步:批量读取数据

# 遍历所有行
for row in ws.iter_rows(values_only=True):
print(row)

# 批量读取为列表
data = []
for row in ws.iter_rows(min_row=2, values_only=True):
data.append(row)

适合从 Excel 提取数据后做计算或入数据库。

第四步:写入新数据

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = ‘新表’

ws[‘A1’] = ‘姓名’
ws[‘B1’] = ‘年龄’
ws.append([‘张三’, 25])
ws.append([‘李四’, 30])

wb.save(‘新表.xlsx’)

第五步:批量处理多个文件

import os, glob
from openpyxl import load_workbook

# 处理文件夹下所有 .xlsx
for filepath in glob.glob(‘sales_*.xlsx’):
wb = load_workbook(filepath)
ws = wb.active
# 计算总销售额
total = 0
for row in ws.iter_rows(min_row=2, values_only=True):
if row[3]: # 销售额在第4列
total += row[3]
print(f'{filepath}: 总销售 {total}’)

一个 30 行的脚本处理 100 个文件只需几秒。

第六步:格式处理

6.1 单元格样式

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

cell = ws[‘A1’]
cell.font = Font(name=’微软雅黑’, size=14, bold=True, color=’FFFFFF’)
cell.fill = PatternFill(start_color=’FF0000′, end_color=’FF0000′, fill_type=’solid’)
cell.alignment = Alignment(horizontal=’center’, vertical=’center’)

thin = Side(border_style=’thin’, color=’000000′)
cell.border = Border(left=thin, right=thin, top=thin, bottom=thin)

6.2 列宽行高

ws.column_dimensions[‘A’].width = 20 # A列宽20
ws.row_dimensions[1].height = 30 # 第1行高30

6.3 数字格式

ws[‘B2’].number_format = ‘0.00’ # 保留2位小数
ws[‘B2’].number_format = ‘#,##0’ # 千分位
ws[‘B2’].number_format = ‘0%’ # 百分比

第七步:跨表合并数据

import pandas as pd

# 方法1:用 pandas 合并多个 Excel
dfs = []
for filepath in glob.glob(‘month_*.xlsx’):
df = pd.read_excel(filepath)
dfs.append(df)
result = pd.concat(dfs)
result.to_excel(‘合并.xlsx’, index=False)

# 方法2:openpyxl 精细控制
from openpyxl import load_workbook
wb_dst = load_workbook(‘合并.xlsx’)
ws_dst = wb_dst.active
ws_dst.append([‘合并列1’, ‘合并列2’])

for filepath in glob.glob(‘month_*.xlsx’):
wb_src = load_workbook(filepath)
ws_src = wb_src.active
for row in ws_src.iter_rows(min_row=2, values_only=True):
ws_dst.append(row)
wb_dst.save(‘合并.xlsx’)

第八步:公式与数据透视

# 写公式
ws[‘D1’] = ‘总价’
ws[‘D2’] = ‘=B2*C2’
ws[‘D3’] = ‘=B3*C3’
ws[‘D5’] = ‘=SUM(D2:D4)’

# 公式复制
for row in range(2, 10):
ws[f’D{row}’] = f’=B{row}*C{row}’

# 数据透视表(openpyxl 支持有限,建议用 pandas)
import pandas as pd
df = pd.read_excel(‘销售数据.xlsx’)
pivot = df.pivot_table(values=’金额’, index=’品类’, columns=’月份’, aggfunc=’sum’)
pivot.to_excel(‘透视表.xlsx’)

第九步:自动生成报表并发送邮件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

def send_email(to, subject, file):
msg = MIMEMultipart()
msg[‘Subject’] = subject
msg[‘From’] = ‘sender@company.com’
msg[‘To’] = to

with open(file, ‘rb’) as f:
part = MIMEBase(‘application’, ‘octet-stream’)
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(‘Content-Disposition’, f’attachment; filename={file}’)
msg.attach(part)

with smtplib.SMTP(‘smtp.company.com’) as server:
server.send_message(msg)

# 每天生成报表后自动发送给领导
wb = Workbook()
ws = wb.active
ws.append([‘部门’, ‘销售额’, ‘环比’])
# … 填数据
wb.save(‘日报.xlsx’)
send_email(‘leader@company.com’, ‘每日销售报告’, ‘日报.xlsx’)

第十步:实战项目

10.1 自动生成周报

从多个数据源读取、计算 KPI、生成 Excel 周报、定时发送邮件。

10.2 工资条自动生成

读取员工信息和考勤数据,自动算工资、生成工资条 PDF、批量发送。

10.3 销售数据汇总

每月合并 30 个区域的销售 Excel、生成透视表、输出年度对比。

10.4 客户数据清洗

规范化地址、合并重复客户、补全缺失字段、生成新数据库文件。

效率提升

  • 批量改格式——人工 2 小时 → 代码 5 秒
  • 合并多文件——人工 30 分钟 → 代码 10 秒
  • 复杂计算——人工 1 小时 + 易错 → 代码 5 秒 + 0 错
  • 定时报表——每天 1 小时 → 自动跑

整体办公效率提升 10-50 倍。

学习路径

  1. 入门——openpyxl 基础读写
  2. 进阶——格式处理 + 公式 + 透视
  3. 高级——pandas + openpyxl 组合
  4. 实战——自动报表系统
  5. 专家——自动化 RPA 平台集成

进阶学习资源

  • 官方文档——openpyxl.readthedocs.io
  • pandas 文档——pandas.pydata.org
  • 实战案例——GitHub 搜’openpyxl project’

学会 Python 自动化 Excel 是职场里性价比最高的一项技能,年均节省 200+ 小时工作时间。