Python实现Excel报表自动化的实践教程

 更新时间:2026年03月02日 08:17:34   作者:FishCoderh  
这篇文章主要为大家详细介绍了如何使用Python实现Excel报表自动化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

前言

每个月底都要花几小时整理 Excel 报表?数据汇总、格式调整、图表制作……这些重复劳动完全可以交给 Python 自动化完成。

本文教你用 Python 自动处理 Excel,从数据读取到报表生成,一键搞定。

场景描述

假设你每月需要处理这样的销售数据:

sales_data.xlsx
├── 1月:订单表、客户表、产品表
├── 2月:订单表、客户表、产品表
└── ...

需要汇总成月度报表,包括:

  • 总销售额
  • 各产品销量排行
  • 客户购买分析
  • 可视化图表

环境准备

# 安装必要的库
pip install pandas openpyxl matplotlib

核心代码

1. 读取 Excel 数据

import pandas as pd

def read_sales_data(file_path):
    """读取销售数据"""
    # 读取多个 sheet
    excel_file = pd.ExcelFile(file_path)
    
    data = {}
    for sheet_name in excel_file.sheet_names:
        data[sheet_name] = pd.read_excel(file_path, sheet_name=sheet_name)
    
    return data

# 使用示例
data = read_sales_data('sales_data.xlsx')
orders = data['订单表']
print(orders.head())

2. 数据汇总统计

def generate_summary(orders_df):
    """生成销售汇总"""
    summary = {
        '总销售额': orders_df['金额'].sum(),
        '订单数量': len(orders_df),
        '平均订单金额': orders_df['金额'].mean(),
        '最大订单': orders_df['金额'].max(),
        '最小订单': orders_df['金额'].min()
    }
    return summary

# 产品销量排行
def product_ranking(orders_df):
    """产品销量排行"""
    ranking = orders_df.groupby('产品名称').agg({
        '数量': 'sum',
        '金额': 'sum'
    }).sort_values('金额', ascending=False)
    
    return ranking

3. 生成报表 Excel

def create_report(data, output_path):
    """生成报表文件"""
    with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
        # 写入汇总数据
        summary_df = pd.DataFrame([generate_summary(data['订单表'])])
        summary_df.to_excel(writer, sheet_name='汇总', index=False)
        
        # 写入产品排行
        ranking = product_ranking(data['订单表'])
        ranking.to_excel(writer, sheet_name='产品排行')
        
        # 写入原始数据
        for sheet_name, df in data.items():
            df.to_excel(writer, sheet_name=sheet_name, index=False)
    
    print(f"报表已生成:{output_path}")

# 使用
create_report(data, '月度销售报表.xlsx')

4. 添加图表

import matplotlib.pyplot as plt
from openpyxl.drawing.image import Image as XLImage

def add_charts(excel_path):
    """为报表添加图表"""
    from openpyxl import load_workbook
    
    wb = load_workbook(excel_path)
    
    # 创建图表数据
    ranking = pd.read_excel(excel_path, sheet_name='产品排行')
    
    # 生成柱状图
    plt.figure(figsize=(10, 6))
    ranking['金额'].head(10).plot(kind='bar')
    plt.title('Top 10 产品销售额')
    plt.tight_layout()
    plt.savefig('chart.png')
    plt.close()
    
    # 插入到 Excel
    ws = wb.create_sheet('图表')
    img = XLImage('chart.png')
    ws.add_image(img, 'A1')
    
    wb.save(excel_path)
    print("图表已添加")

完整自动化脚本

import pandas as pd
import matplotlib.pyplot as plt
from openpyxl import load_workbook
from openpyxl.drawing.image import Image as XLImage
import os
from datetime import datetime

def auto_generate_report(input_folder, output_folder):
    """自动生成月度报表"""
    
    # 确保输出文件夹存在
    os.makedirs(output_folder, exist_ok=True)
    
    # 获取当前月份
    current_month = datetime.now().strftime('%Y年%m月')
    output_file = f"{output_folder}/{current_month}销售报表.xlsx"
    
    # 读取所有数据文件
    all_data = []
    for file in os.listdir(input_folder):
        if file.endswith('.xlsx'):
            file_path = os.path.join(input_folder, file)
            data = read_sales_data(file_path)
            all_data.append(data['订单表'])
    
    # 合并数据
    combined_data = pd.concat(all_data, ignore_index=True)
    
    # 生成报表
    create_report({'订单表': combined_data}, output_file)
    
    # 添加图表
    add_charts(output_file)
    
    print(f"✅ 报表生成完成:{output_file}")
    return output_file

# 每月自动执行
if __name__ == '__main__':
    auto_generate_report('./raw_data', './reports')

进阶技巧

数据清洗

# 处理缺失值
orders_df['金额'].fillna(0, inplace=True)

# 数据类型转换
orders_df['日期'] = pd.to_datetime(orders_df['日期'])

# 异常值处理
orders_df = orders_df[orders_df['金额'] > 0]

条件格式

from openpyxl.styles import PatternFill

def highlight_top10(excel_path):
    """高亮显示前10名"""
    wb = load_workbook(excel_path)
    ws = wb['产品排行']
    
    # 红色填充
    red_fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')
    
    # 高亮前10行
    for row in range(2, 12):
        for col in range(1, 4):
            ws.cell(row=row, column=col).fill = red_fill
    
    wb.save(excel_path)

定时自动执行

# 添加到 crontab,每月1号凌晨执行
0 0 1 * * /usr/bin/python3 /path/to/auto_generate_report.py

总结

用 Python 处理 Excel:

  • 读取多个 sheet
  • 数据汇总统计
  • 自动生成图表
  • 格式化美化
  • 定时自动执行

从此告别手工报表,每月节省数小时!

到此这篇关于Python实现Excel报表自动化的实践教程的文章就介绍到这了,更多相关Python自动生成Excel报表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python编写adb截图工具的实现源码

    python编写adb截图工具的实现源码

    adb截图工具可用于Android手机及Android终端,Android端或者Android终端的远程截图至本地电脑中,今天通过本文给大家介绍python编写adb截图工具的实现源码,感兴趣的朋友一起看看吧
    2021-08-08
  • Python利用watchdog模块监控文件变化

    Python利用watchdog模块监控文件变化

    这篇文章主要为大家介绍一个Python中的模块:watchdog模块,它可以实现监控文件的变化。文中通过示例详细介绍了watchdog模块的使用,需要的可以参考一下
    2022-06-06
  • python中函数默认值使用注意点详解

    python中函数默认值使用注意点详解

    下面小编就为大家带来一篇python中函数默认值使用注意点详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 使用python+Flask实现日志在web网页实时更新显示

    使用python+Flask实现日志在web网页实时更新显示

    日志是一种可以追踪某些软件运行时所发生事件的方法,下面这篇文章主要给大家介绍了关于使用python+Flask实现日志在web网页实时更新显示的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • python实现类的静态变量用法实例

    python实现类的静态变量用法实例

    这篇文章主要介绍了python实现类的静态变量用法,实例分析了Python中基于数组实现静态队列的相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • Pandas中map(),applymap(),apply()函数的使用方法

    Pandas中map(),applymap(),apply()函数的使用方法

    本文主要介绍了Pandas中map(),applymap(),apply()函数的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python用fsolve、leastsq对非线性方程组求解

    python用fsolve、leastsq对非线性方程组求解

    这篇文章主要为大家详细介绍了python用fsolve、leastsq对非线性方程组进行求解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • python主线程与子线程的结束顺序实例解析

    python主线程与子线程的结束顺序实例解析

    这篇文章主要介绍了python主线程与子线程的结束顺序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python基础教程之Matplotlib图形绘制详解

    Python基础教程之Matplotlib图形绘制详解

    Matplotlib是一个广泛使用的数据可视化库,提供了丰富的绘图功能,用于创建各种类型的静态、动态和交互式图形,本文将通过多个例子给大家详细介绍一下Python的Matplotlib图形绘制,需要的朋友可以参考下
    2023-07-07
  • Python+OpenCV实现基于颜色的目标识别

    Python+OpenCV实现基于颜色的目标识别

    这篇文章主要介绍了利用OpenCV实现基于颜色的目标识别,即让摄像头识别到视野范围内的有颜色的气球并返回每个气球的中心点坐标,感兴趣的可以跟随小编学习一下
    2022-01-01

最新评论