🏠 首页 > 实战宝典 > 入门教程

Python自动处理Excel报表:零基础入门教程

📅 2025年6月25日 · 实战宝典

在日常工作中,Excel报表处理是最常见的重复性劳动之一——每月汇总销售数据、每周更新项目进度、每天整理运营报表……如果你还在手动复制粘贴、拖动公式、一个个修改格式,那你每天至少浪费1小时以上。本教程将教你用Python彻底解放双手,自动化处理Excel报表。你只需要安装Python 3.x即可开始,无需安装Microsoft Office。

一、环境准备:安装所需库

我们主要使用两个库:pandas(数据处理)和 openpyxl(Excel读写)。打开终端或命令提示符,执行以下命令:

# 安装pandas(自动包含openpyxl依赖)
pip install pandas openpyxl

# 验证安装
python -c "import pandas; import openpyxl; print('安装成功!')"

二、读取Excel数据

▎读取单表

import pandas as pd

# 读取Excel文件(默认第一个工作表)
df = pd.read_excel('sales_data.xlsx')

# 查看前5行数据
print(df.head())

# 查看数据基本信息
print(df.info())

# 查看列名
print(df.columns.tolist())

▎读取多表

# 读取所有工作表
all_sheets = pd.read_excel('report.xlsx', sheet_name=None)

# 遍历处理每个工作表
for sheet_name, sheet_data in all_sheets.items():
    print(f"处理工作表:{sheet_name},共{len(sheet_data)}行数据")
    # 保存每个工作表为独立的DataFrame
    locals()[f'df_{sheet_name}'] = sheet_data

三、数据清洗与转换

▎筛选数据

# 筛选销售额大于10000的记录
high_sales = df[df['销售额'] > 10000]

# 筛选2026年6月的数据
df['日期'] = pd.to_datetime(df['日期'])
june_2026 = df[(df['日期'] >= '2026-06-01') & (df['日期'] <= '2026-06-30')]

# 多条件筛选:华北地区且销售额>5000
filtered = df[(df['地区'] == '华北') & (df['销售额'] > 5000)]

▎排序数据

# 按销售额降序排列
df_sorted = df.sort_values('销售额', ascending=False)

# 多列排序:先按地区升序,再按销售额降序
df_sorted = df.sort_values(['地区', '销售额'], ascending=[True, False])

▎去重

# 按订单号去重,保留第一条
df_unique = df.drop_duplicates(subset='订单号')

# 查看重复记录数量
print(f"去重前:{len(df)}行,去重后:{len(df_unique)}行")

▎填充空值

# 查看各列的空值数
print(df.isnull().sum())

# 用0填充数值列的空值
df['销售额'].fillna(0, inplace=True)

# 用前向填充法填充时间序列的空值
df['指标值'].fillna(method='ffill', inplace=True)

# 用平均值填充
df['评分'].fillna(df['评分'].mean(), inplace=True)

四、生成报表

▎写入新Excel

# 将处理后的数据写入新Excel文件
df_clean.to_excel('cleaned_report.xlsx', index=False, sheet_name='清洗后数据')

# 写入多个工作表
with pd.ExcelWriter('weekly_report.xlsx', engine='openpyxl') as writer:
    df_summary.to_excel(writer, sheet_name='汇总', index=False)
    df_detail.to_excel(writer, sheet_name='明细', index=False)
    df_chart.to_excel(writer, sheet_name='图表数据', index=False)

▎格式化单元格

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

# 加载已生成的Excel文件
wb = load_workbook('weekly_report.xlsx')
ws = wb['汇总']

# 设置表头样式
header_font = Font(bold=True, color='FFFFFF', size=11)
header_fill = PatternFill(start_color='0A4B8C', end_color='0A4B8C', fill_type='solid')
header_alignment = Alignment(horizontal='center', vertical='center')
thin_border = Border(
    left=Side(style='thin'),
    right=Side(style='thin'),
    top=Side(style='thin'),
    bottom=Side(style='thin')
)

for cell in ws[1]:  # 第一行是表头
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = header_alignment
    cell.border = thin_border

# 设置列宽
ws.column_dimensions['A'].width = 20
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 12

wb.save('weekly_report_formatted.xlsx')

▎创建图表

from openpyxl.chart import BarChart, Reference

# 创建柱状图
chart = BarChart()
chart.title = "各地区销售额对比"
chart.y_axis.title = "销售额(万元)"
chart.x_axis.title = "地区"
chart.style = 10

# 确定数据范围
data = Reference(ws, min_col=2, min_row=1, max_row=10)
cats = Reference(ws, min_col=1, min_row=2, max_row=10)

chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.shape = 4

# 将图表放置在E2单元格起始位置
ws.add_chart(chart, "E2")

wb.save('weekly_report_with_chart.xlsx')

五、完整实战案例:从CSV生成周报Excel

假设你每天从业务系统导出一个CSV文件(sales_daily.csv),需要每周汇总生成格式化的Excel周报:

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.chart import BarChart, Reference
import glob

# 1. 读取本周所有CSV文件
csv_files = glob.glob('sales_2026W26_*.csv')
df_list = []
for f in csv_files:
    df = pd.read_csv(f)
    df_list.append(df)

df_all = pd.concat(df_list, ignore_index=True)

# 2. 数据清洗
df_all = df_all.drop_duplicates(subset='订单号')
df_all['销售额'] = pd.to_numeric(df_all['销售额'], errors='coerce').fillna(0)
df_all['日期'] = pd.to_datetime(df_all['日期'])

# 3. 汇总统计
summary = df_all.groupby('地区').agg(
    订单数=('订单号', 'count'),
    总销售额=('销售额', 'sum'),
    平均销售额=('销售额', 'mean')
).reset_index()
summary = summary.sort_values('总销售额', ascending=False)

# 4. 输出到Excel
output_file = '周报_2026年第26周.xlsx'
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
    summary.to_excel(writer, sheet_name='地区汇总', index=False)
    df_all.to_excel(writer, sheet_name='原始明细', index=False)

# 5. 格式化
wb = load_workbook(output_file)
ws = wb['地区汇总']

header_style = Font(bold=True, color='FFFFFF', size=11)
header_fill = PatternFill(start_color='0A4B8C', end_color='0A4B8C', fill_type='solid')
for cell in ws[1]:
    cell.font = header_style
    cell.fill = header_fill
    cell.alignment = Alignment(horizontal='center')

# 6. 添加图表
chart = BarChart()
chart.title = "各地区周销售额"
data = Reference(ws, min_col=3, min_row=1, max_row=len(summary)+1)
cats = Reference(ws, min_col=1, min_row=2, max_row=len(summary)+1)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "E2")

wb.save(output_file)
print(f"周报已生成:{output_file}")

将上述脚本保存为 weekly_report_generator.py,每周五运行一次,即可自动生成格式化周报。

六、进阶提示

  • 性能优化:处理大型Excel文件(>10万行)时,使用 engine='calamine' 代替默认的openpyxl,速度提升数倍
  • 自动化调度:将脚本加入Windows任务计划程序或Linux cron,实现完全自动化
  • 邮件发送:结合 yagmailsmtplib 自动将报表通过邮件发送给相关人员
  • 格式模板:预置一个格式模板Excel文件,用openpyxl读取模板后填入数据,保证样式统一

📝 综合自公开媒体报道及开源社区文档整理

🌊 本文由「乾坤BOT」原创发布