大家好!我是CSDN的Python新手博主~ 前面六篇分享了文件整理、记账、OCR、PDF/Word批量处理等办公自动化工具,很多小伙伴反馈“日常要处理大量Excel数据,筛选统计太耗时,还不会做可视化图表”。今天就带来超落地的新手实战项目——Excel批量处理+数据可视化工具!

这个工具能一键搞定“批量读取多个Excel、筛选清洗数据、自动生成柱状图/折线图/饼图”,还能把图表保存到本地或插入Excel中。全程用2个基础第三方库实现,代码逻辑简单,新手复制就能运行,学会后不管是做报表、写总结,都能快速出专业图表,效率翻倍~

一、本次学习目标

  1. 掌握Excel处理核心库(openpyxl)的进阶用法(批量读取、数据筛选);

  2. 学会基础数据可视化库(matplotlib)的入门使用,生成常见图表;

  3. 理解“数据读取-清洗-可视化”的完整流程;

  4. 实现菜单式交互,支持批量处理与图表生成,不用修改代码。

二、前期准备:安装依赖库

本次核心依赖2个库,都是新手友好型,安装步骤超简单,打开命令行(Win+R输cmd/Mac终端),用清华源安装即可:

处理Excel(读取、写入、插入图表)

pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

数据可视化(生成柱状图、折线图等)

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

注意:openpyxl 支持 Excel 2007及以上版本(.xlsx格式),如果是 .xls 旧格式,需先另存为 .xlsx;matplotlib 默认不支持中文,后续代码会加入中文显示配置,避免乱码!

三、实战:实现Excel批量处理+数据可视化工具

  1. 核心需求
  • 批量读取:读取指定文件夹内所有Excel文件的指定sheet数据;

  • 数据筛选:按条件筛选数据(如“销售额>1000”“部门=技术部”),生成新Excel;

  • 图表生成:基于Excel数据自动生成柱状图、折线图、饼图,支持保存为图片或插入原Excel;

  • 批量统计:统计多个Excel的汇总数据(如各部门总销售额),生成汇总表。

  1. 完整代码(可直接复制运行)

import os
import matplotlib.pyplot as plt
from openpyxl import load_workbook, Workbook
from openpyxl.drawing.image import Image

配置matplotlib中文显示(避免乱码)

plt.rcParams[‘font.sans-serif’] = [‘SimHei’] # 用黑体显示中文
plt.rcParams[‘axes.unicode_minus’] = False # 正常显示负号

def batch_read_excel(input_folder, sheet_name=“Sheet1”):
“”“批量读取文件夹内所有Excel的指定sheet数据,返回汇总数据”“”
excel_files = [f for f in os.listdir(input_folder) if f.lower().endswith(‘.xlsx’)]
if not excel_files:
print(“❌ 目标文件夹内无xlsx格式文件!”)
return []

all_data = []
try:
    for excel_file in excel_files:
        file_path = os.path.join(input_folder, excel_file)
        wb = load_workbook(file_path)
        # 检查sheet是否存在,不存在则用第一个sheet
        if sheet_name not in wb.sheetnames:
            sheet_name = wb.sheetnames[0]
            print(f"⚠️ {excel_file} 无{sheet_name},自动使用第一个sheet:{sheet_name}")
        ws = wb[sheet_name]
        
        # 读取数据(第一行为表头,从第二行开始读数据)
        headers = [cell.value for cell in ws[1]]  # 表头
        data = []
        for row in ws.iter_rows(min_row=2, values_only=True):
            if row[0] is not None:  # 跳过空行
                data.append(dict(zip(headers, row)))
        
        all_data.extend(data)
        print(f"✅ 已读取:{excel_file},共{len(data)}条数据")
    print(f"\n📊 批量读取完成!总计{len(all_data)}条数据")
    return all_data
except Exception as e:
    print(f"❌ 读取失败:{str(e)}")
    return []

def filter_excel_data(data, filter_key, filter_condition, filter_value, output_excel):
“”“按条件筛选数据,生成新Excel(如:销售额>1000、部门=技术部)”“”
if not data:
print(“❌ 无待筛选数据!”)
return

# 筛选逻辑
filtered_data = []
for item in data:
    # 确保筛选字段存在
    if filter_key not in item:
        print(f"❌ 数据中无{filter_key}字段!")
        return
    item_value = item[filter_key]
    # 处理数值类型转换(避免字符串比较)
    try:
        item_value = float(item_value)
        filter_value = float(filter_value)
    except:
        pass  # 非数值类型直接字符串比较
    
    # 按条件筛选
    if filter_condition == ">":
        if item_value > filter_value:
            filtered_data.append(item)
    elif filter_condition == "<":
        if item_value < filter_value:
            filtered_data.append(item)
    elif filter_condition == "==":
        if item_value == filter_value:
            filtered_data.append(item)
    else:
        print("❌ 不支持的筛选条件!仅支持 > < =(输入==)")
        return

if not filtered_data:
    print("❌ 无符合条件的数据!")
    return

# 生成筛选后的Excel
wb = Workbook()
ws = wb.active
ws.title = "筛选结果"
# 写入表头
headers = list(data[0].keys())
for col, header in enumerate(headers, 1):
    ws.cell(row=1, column=col, value=header)
# 写入数据
for row, item in enumerate(filtered_data, 2):
    for col, key in enumerate(headers, 1):
        ws.cell(row=row, column=col, value=item[key])

wb.save(output_excel)
print(f"\n🎉 筛选完成!符合条件共{len(filtered_data)}条数据,已保存至:{output_excel}")

def generate_chart(data, chart_type, x_key, y_key, output_path):
“”“生成图表(柱状图/折线图/饼图),保存为图片”“”
if not data:
print(“❌ 无待可视化数据!”)
return

# 提取x和y轴数据
x_data = [item.get(x_key, "") for item in data]
y_data = [item.get(y_key, 0) for item in data]
# 过滤空数据
x_data, y_data = zip(*[(x, y) for x, y in zip(x_data, y_data) if x and y])
if not x_data:
    print("❌ 无有效数据用于生成图表!")
    return

# 创建图表
plt.figure(figsize=(10, 6))  # 图表大小

if chart_type == "柱状图":
    plt.bar(x_data, y_data, color='#3498db')
elif chart_type == "折线图":
    plt.plot(x_data, y_data, marker='o', color='#e74c3c', linewidth=2)
elif chart_type == "饼图":
    # 饼图需要标签和百分比
    plt.pie(y_data, labels=x_data, autopct='%1.1f%%', colors=['#3498db', '#e74c3c', '#2ecc71', '#f39c12'])
    plt.axis('equal')  # 保证饼图是正圆形
else:
    print("❌ 不支持的图表类型!仅支持 柱状图 折线图 饼图")
    return

# 图表标题和坐标轴标签
plt.title(f"{y_key}按{x_key}分布", fontsize=14)
if chart_type != "饼图":
    plt.xlabel(x_key, fontsize=12)
    plt.ylabel(y_key, fontsize=12)
plt.xticks(rotation=45)  # x轴标签旋转45度,避免重叠
plt.tight_layout()  # 自动调整布局,防止标签被截断

# 保存图表
plt.savefig(output_path, dpi=300)
plt.close()
print(f"\n🎉 图表生成完成!已保存至:{output_path}")

def main():
“”“主菜单:交互选择功能”“”
print(“===== Python Excel批量处理+数据可视化工具 =====”)
print(“1. 批量读取多个Excel数据”)
print(“2. 按条件筛选数据并生成新Excel”)
print(“3. 生成柱状图/折线图/饼图(保存为图片)”)
print(“4. 退出工具”)

all_data = []  # 存储批量读取的所有数据
while True:
    choice = input("\n请输入操作编号(1-4):")
    if choice == "1":
        input_folder = input("请输入Excel文件夹路径(如:C:\\Users\\张三\\Desktop\\Excel数据):")
        sheet_name = input("请输入要读取的sheet名称(默认Sheet1):") or "Sheet1"
        all_data = batch_read_excel(input_folder, sheet_name)
    elif choice == "2":
        if not all_data:
            print("⚠️  请先执行【1. 批量读取多个Excel数据】!")
            continue
        filter_key = input("请输入筛选字段(如:销售额、部门):")
        filter_condition = input("请输入筛选条件(> / < / ==):")
        filter_value = input(f"请输入筛选值(如:1000、技术部):")
        output_excel = input("请输入筛选结果保存文件名(如:筛选结果.xlsx):")
        filter_excel_data(all_data, filter_key, filter_condition, filter_value, output_excel)
    elif choice == "3":
        if not all_data:
            print("⚠️  请先执行【1. 批量读取多个Excel数据】!")
            continue
        chart_type = input("请输入图表类型(柱状图/折线图/饼图):")
        x_key = input("请输入x轴字段(如:部门、月份):")
        y_key = input("请输入y轴字段(如:销售额、人数):")
        output_path = input("请输入图表保存路径(如:C:\\Users\\张三\\Desktop\\销售额图表.png):")
        generate_chart(all_data, chart_type, x_key, y_key, output_path)
    elif choice == "4":
        print("感谢使用,再见!")
        break
    else:
        print("❌ 输入错误,请选择1-4之间的编号!")

if name == “main”:
main()

  1. 关键代码拆解(新手必看)

(1)核心库作用

-openpyxl:Excel处理核心库,支持批量读取多个Excel、筛选数据、生成新Excel,还能插入图片(后续扩展用);

  • matplotlib:Python最常用的可视化库,入门简单,支持多种图表类型,生成的图表可直接保存为图片;

  • os:处理文件路径、遍历文件夹,和之前工具用法一致,新手可直接复用知识。

(2)批量读取Excel逻辑

  • 用 os.listdir() 筛选文件夹内所有 .xlsx 文件,避免处理非Excel文件;

  • 用 load_workbook() 打开Excel,ws.iter_rows(min_row=2, values_only=True)从第二行开始读取数据(跳过表头);

  • 用字典(dict(zip(headers, row)))存储每条数据,键是表头、值是数据,后续筛选/可视化更方便。

(3)数据筛选逻辑

  • 支持 “>”“<”“” 三种常用筛选条件,覆盖大部分办公场景(如“销售额>1000”“部门技术部”);

  • 加入数值类型转换(float()),避免“字符串格式的数字”无法比较(如“1000”和1000);

  • 筛选后自动生成新Excel,表头和原数据一致,不用手动整理格式。

(4)数据可视化逻辑

  • 先配置中文显示(plt.rcParams),这是matplotlib新手最容易踩的坑,提前配置好避免乱码;

  • 提取x轴和y轴数据后,过滤空值(避免图表显示异常);

  • 不同图表类型用不同函数:plt.bar()(柱状图)、plt.plot()(折线图)、plt.pie()(饼图),参数简单易懂;

  • 设置图表标题、坐标轴标签,旋转x轴标签(rotation=45),避免文字重叠,让图表更专业。

四、运行效果演示

  1. 批量读取Excel+生成柱状图

===== Python Excel批量处理+数据可视化工具 =====

  1. 批量读取多个Excel数据
  2. 按条件筛选数据并生成新Excel
  3. 生成柱状图/折线图/饼图(保存为图片)
  4. 退出工具

请输入操作编号(1-4):1
请输入Excel文件夹路径:C:\Users\张三\Desktop\月度销售额
请输入要读取的sheet名称(默认Sheet1):
✅ 已读取:1月销售额.xlsx,共5条数据
✅ 已读取:2月销售额.xlsx,共5条数据

📊 批量读取完成!总计10条数据

请输入操作编号(1-4):3
请输入图表类型(柱状图/折线图/饼图):柱状图
请输入x轴字段(如:部门、月份):部门
请输入y轴字段(如:销售额、人数):销售额
请输入图表保存路径:C:\Users\张三\Desktop\部门销售额柱状图.png

🎉 图表生成完成!已保存至:C:\Users\张三\Desktop\部门销售额柱状图.png

打开保存的图片,会看到清晰的柱状图,每个部门的销售额对比一目了然,比Excel手动做图更快捷!

  1. 筛选数据

请输入操作编号(1-4):2
请输入筛选字段(如:销售额、部门):销售额
请输入筛选条件(> / < / ==):>
请输入筛选值(如:1000、技术部):1500
请输入筛选结果保存文件名(如:筛选结果.xlsx):销售额大于1500.xlsx

🎉 筛选完成!符合条件共3条数据,已保存至:销售额大于1500.xlsx

五、新手避坑小贴士

  1. Excel格式问题:仅支持 .xlsx 格式,.xls 旧格式需用WPS/Excel另存为 .xlsx;如果Excel中有合并单元格,会导致读取数据错乱,新手建议先取消合并单元格再处理。

  2. matplotlib中文乱码:代码中已加入中文配置(SimHei是黑体),如果仍乱码,可能是系统缺少黑体,可百度“matplotlib中文乱码解决”,下载黑体字体放到指定目录。

  3. 数据类型问题:筛选数值字段(如销售额)时,确保Excel中该列是“数字格式”,如果是文本格式,可能导致筛选失败,可在Excel中选中列→设置单元格格式→数字。

  4. 路径问题:Windows路径用 r"路径" 或把反斜杠改成正斜杠(如 “C:/Users/张三/Desktop”);路径中不要有空格、emoji或特殊符号。

  5. 图表显示问题:如果x轴标签太多导致重叠,可调整 rotation 参数(如 rotation=60),或增大 figsize(如 figsize=(12,6))。

六、功能扩展(新手进阶方向)

学会核心功能后,可尝试这些进阶扩展,让工具更实用:

  1. 图表插入Excel:用 openpyxl 的 Image() 函数,把生成的图表直接插入Excel指定位置,不用单独保存图片;

  2. 多图表组合:在同一张图中显示柱状图+折线图(如销售额柱状图+增长率折线图);

  3. Excel批量合并:把多个Excel的相同sheet合并为一个汇总Excel,自动去重;

  4. 自动发送报表:把筛选后的数据和生成的图表,通过邮件自动发送给指定人(结合之前学的邮件发送工具);

  5. 交互式图表:用 pyecharts 库替换 matplotlib,生成可点击、可缩放的交互式图表(网页格式)。

七、总结与后续规划

这篇文章通过“Excel批量处理+数据可视化工具”,带大家掌握了办公自动化的核心技能——Excel数据处理与图表生成。新手学习Python的关键就是“带着需求学”,把工具用到实际工作中,比如用它做月度销售报表、学生成绩统计,既能节省时间,又能加深对知识点的理解。

接下来的系列文章,我会聚焦“工具整合”与“GUI可视化”:

  • 办公自动化大整合:把Excel、Word、PDF、邮件发送工具整合为一个“全能办公助手”;

  • Python GUI实战:用 tkinter 给工具加可视化界面(点击按钮选择文件、生成图表),彻底告别命令行;

  • 定时自动化:设置定时任务,每天自动处理Excel数据、生成报表并发送给领导。

如果这篇文章对你有帮助,欢迎点赞收藏+关注,也可以在评论区分享你的使用问题(比如“图表中文乱码”“筛选数据失败”),我会逐一解答~ 新手不用怕出错,多尝试、多调试代码,慢慢就能熟练掌握这些实用技能!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐