Python+PyQt5打造一个Excel批量列处理工具

 更新时间:2026年04月12日 08:10:01   作者:小庄-Python办公  
在日常的办公中,我们经常会遇到需要批量处理Excel文件的情况,今天我们就用 Python + PyQt5 + Pandas 打造一款图形化的Excel批量列处理工具,不仅支持一键拖拽文件,还能动态选择列名、添加多条处理规则,帮你彻底告别重复劳动

在日常的办公中,我们经常会遇到需要批量处理Excel文件的情况。比如:给几百个员工的姓名前面加上部门名称,把一列包含完整地址的数据拆分成省、市、区多列,或者对某些产品的价格统一上调50元。如果只有一两个文件,手动改改还行;但如果是几十个文件,或者每个月都要重复这些操作,那就太折磨人了!

今天,我们就用 Python + PyQt5 + Pandas 打造一款图形化的“Excel批量列处理工具”,不仅支持一键拖拽文件,还能动态选择列名、添加多条处理规则,帮你彻底告别重复劳动!

Python+PyQt5打造一个Excel批量列处理工具

工具亮点展示

这款工具具备以下强大的功能:

  1. 傻瓜式文件导入:支持点击选择或直接将多个 Excel 文件拖拽到软件窗口。
  2. 智能识别列名:导入文件后,程序会自动读取 Excel 的表头,并生成下拉列表供你选择,再也不用担心手动输入列名打错字了。
  3. 强大的六大操作
    • 全部替换:将整列数据替换为统一的新值。
    • 头部/尾部添加:批量给文本添加前缀或后缀。
    • 字符分割(多列/保留单列):支持按指定字符将一列拆分成多列,或者只提取你需要的那部分。
    • 数值统一加减:一键对数值列进行加减运算。
  4. 多规则流水线:可以在一次任务中添加多条规则(比如先给A列加前缀,再把B列拆分),程序会按顺序一次性处理完毕。
  5. 安全可靠:处理后的文件会自动另存为 原文件名_已处理.xlsx,绝不覆盖你的原始数据!

核心代码拆解

这款工具的界面是使用 PyQt5 编写的,而底层的表格处理则是大名鼎鼎的数据分析库 Pandas。我们来看看几个关键的技术点:

1. 动态读取 Excel 列名

为了让用户能直接从下拉菜单中选择列名,我们需要在用户拖入文件后,迅速读取 Excel 的表头。这里我们用到了 pandas 的一个小技巧:设置 nrows=0,这样 pandas 只会读取表头,不会加载海量的数据,速度极快!

def update_columns(self):
    """更新列名下拉列表"""
    self.column_combo.clear()
    if not self.files:
        return
        
    try:
        # 读取第一个文件的表头作为参考,nrows=0 大幅提升读取速度
        file_path = self.files[0]
        header_row = self.header_spin.value()
        df = pd.read_excel(file_path, header=header_row - 1, nrows=0)
        columns = df.columns.tolist()
        self.column_combo.addItems([str(col) for col in columns])
    except Exception as e:
        self.status_label.setText(f"读取列名失败: {str(e)}")

2. 使用 QThread 避免界面卡顿

处理大体积的 Excel 文件或者同时处理数十个文件时,如果在主线程里执行,软件界面就会“假死”(未响应)。所以我们继承 QThread 编写了一个 ProcessThread,把耗时的处理工作放到后台线程。

class ProcessThread(QThread):
    progress = pyqtSignal(str)
    finished = pyqtSignal(bool, str)
    
    def __init__(self, files, header_row, rules):
        super().__init__()
        self.files = files
        self.header_row = header_row
        self.rules = rules
    
    def run(self):
        try:
            success_count = 0
            for file_path in self.files:
                self.progress.emit(f"正在处理: {os.path.basename(file_path)}")
                if self.process_file(file_path):
                    success_count += 1
            
            self.finished.emit(True, f"处理完成!成功处理 {success_count}/{len(self.files)} 个文件")
        except Exception as e:
            self.finished.emit(False, f"处理出错: {str(e)}")

3. Pandas 数据处理核心逻辑

核心的数据处理部分全靠 Pandas。我们遍历用户设定的规则列表 self.rules,针对不同的操作类型,调用相应的 Pandas API。比如字符串拼接、str.split 拆分列,以及 pd.to_numeric 进行数值计算:

def process_file(self, file_path):
    df = pd.read_excel(file_path, header=self.header_row - 1)
    
    for rule in self.rules:
        column_name = rule.get('column')
        operation = rule.get('operation')
        params = rule.get('params', {})
        
        if operation == "头部添加":
            prefix = params.get('prefix', '')
            df[column_name] = prefix + df[column_name].astype(str)
            
        elif operation == "以字符分割成多列":
            delimiter = params.get('delimiter', ',')
            # expand=True 会直接返回一个 DataFrame
            split_data = df[column_name].astype(str).str.split(delimiter, expand=True)
            df = df.drop(columns=[column_name])
            col_index = df.columns.tolist().index(column_name) if column_name in df.columns else len(df.columns)
            for i, col in enumerate(split_data.columns):
                df.insert(col_index + i, f"{column_name}_分割{i+1}", split_data[col])
                
        elif operation == "数值统一加减":
            add_value = params.get('add_value', 0)
            df[column_name] = pd.to_numeric(df[column_name], errors='coerce') + add_value
            
    # 安全保存文件
    base_name, ext = os.path.splitext(file_path)
    output_path = f"{base_name}_已处理{ext}"
    df.to_excel(output_path, index=False)
    return True

打包为 EXE 分享给同事

写好代码后,为了让没有安装 Python 环境的同事也能使用,我们可以使用 PyInstaller 将它打包成一个独立的 EXE 可执行文件。

只需在命令行中运行以下命令:

pyinstaller --noconfirm --onefile --windowed --icon "修改.ico" --add-data "修改.png;." --name "Excel批量列处理工具" excel_editor.py
  • --onefile:打包成单一文件
  • --windowed:运行时不显示黑乎乎的控制台黑框
  • --icon--add-data:给软件加上好看的图标

打包完成后,在 dist 目录下就会生成一个 Excel批量列处理工具.exe,直接双击就能愉快地使用了!

结语

借助 Python 和 Pandas 强大的数据处理能力,再搭配 PyQt5 的图形化界面,我们轻松就把繁琐的 Excel 处理工作变成了一键式的傻瓜工具。不仅自己用着爽,发给身边的同事,绝对能让你收获满满的赞誉!

到此这篇关于Python+PyQt5打造一个Excel批量列处理工具的文章就介绍到这了,更多相关Python Excel批量列处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中文编码知识点

    Python中文编码知识点

    在本篇文章里小编给大家分享了关于Python中文编码的相关知识点以及对应实例内容,有兴趣的朋友们学习下。
    2019-02-02
  • 详解django中Template语言

    详解django中Template语言

    Django是一个开放源代码的Web应用框架,由Python写成。这篇文章给大家介绍django中Template语言,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-02-02
  • 基于OpenCV实现小型的图像数据库检索功能

    基于OpenCV实现小型的图像数据库检索功能

    下面就使用VLAD表示图像,实现一个小型的图像数据库的检索程序。下面实现需要的功能模块,分步骤给大家介绍的非常详细,对OpenCV图像数据库检索功能感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • Python turtle编写简单的球类小游戏

    Python turtle编写简单的球类小游戏

    turtle (小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏。本文将利用Turtle制作一个简单的球类小游戏,感兴趣的可以学习一下
    2022-03-03
  • 用Python制作检测Linux运行信息的工具的教程

    用Python制作检测Linux运行信息的工具的教程

    这篇文章主要介绍了用Python制作检测Linux运行信息的工具的教程,主要是用CPython读取运行系统的硬件参数、网络传输流量统计等,需要的朋友可以参考下
    2015-04-04
  • 使用Django xadmin 实现修改时间选择器为不可输入状态

    使用Django xadmin 实现修改时间选择器为不可输入状态

    这篇文章主要介绍了使用Django xadmin 实现修改时间选择器为不可输入状态,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python的Tornado Web框架深入解析

    Python的Tornado Web框架深入解析

    这篇文章主要为大家介绍了Python的Tornado Web框架的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • python3通过subprocess模块调用脚本并和脚本交互的操作

    python3通过subprocess模块调用脚本并和脚本交互的操作

    这篇文章主要介绍了python3通过subprocess模块调用脚本并和脚本交互的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • python机器学习pytorch自定义数据加载器

    python机器学习pytorch自定义数据加载器

    这篇文章主要为大家介绍了python机器学习pytorch自定义数据加载器使用示例学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 基于python实现鼠标实时坐标监测

    基于python实现鼠标实时坐标监测

    这篇文章主要给大家介绍了如何基于python实现鼠标实时坐标监测,文章通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-11-11

最新评论