Python+PyQt5打造一個(gè)Excel批量列處理工具
在日常的辦公中,我們經(jīng)常會(huì)遇到需要批量處理Excel文件的情況。比如:給幾百個(gè)員工的姓名前面加上部門名稱,把一列包含完整地址的數(shù)據(jù)拆分成省、市、區(qū)多列,或者對(duì)某些產(chǎn)品的價(jià)格統(tǒng)一上調(diào)50元。如果只有一兩個(gè)文件,手動(dòng)改改還行;但如果是幾十個(gè)文件,或者每個(gè)月都要重復(fù)這些操作,那就太折磨人了!
今天,我們就用 Python + PyQt5 + Pandas 打造一款圖形化的“Excel批量列處理工具”,不僅支持一鍵拖拽文件,還能動(dòng)態(tài)選擇列名、添加多條處理規(guī)則,幫你徹底告別重復(fù)勞動(dòng)!

工具亮點(diǎn)展示
這款工具具備以下強(qiáng)大的功能:
- 傻瓜式文件導(dǎo)入:支持點(diǎn)擊選擇或直接將多個(gè) Excel 文件拖拽到軟件窗口。
- 智能識(shí)別列名:導(dǎo)入文件后,程序會(huì)自動(dòng)讀取 Excel 的表頭,并生成下拉列表供你選擇,再也不用擔(dān)心手動(dòng)輸入列名打錯(cuò)字了。
- 強(qiáng)大的六大操作:
- 全部替換:將整列數(shù)據(jù)替換為統(tǒng)一的新值。
- 頭部/尾部添加:批量給文本添加前綴或后綴。
- 字符分割(多列/保留單列):支持按指定字符將一列拆分成多列,或者只提取你需要的那部分。
- 數(shù)值統(tǒng)一加減:一鍵對(duì)數(shù)值列進(jìn)行加減運(yùn)算。
- 多規(guī)則流水線:可以在一次任務(wù)中添加多條規(guī)則(比如先給A列加前綴,再把B列拆分),程序會(huì)按順序一次性處理完畢。
- 安全可靠:處理后的文件會(huì)自動(dòng)另存為
原文件名_已處理.xlsx,絕不覆蓋你的原始數(shù)據(jù)!
核心代碼拆解
這款工具的界面是使用 PyQt5 編寫的,而底層的表格處理則是大名鼎鼎的數(shù)據(jù)分析庫(kù) Pandas。我們來看看幾個(gè)關(guān)鍵的技術(shù)點(diǎn):
1. 動(dòng)態(tài)讀取 Excel 列名
為了讓用戶能直接從下拉菜單中選擇列名,我們需要在用戶拖入文件后,迅速讀取 Excel 的表頭。這里我們用到了 pandas 的一個(gè)小技巧:設(shè)置 nrows=0,這樣 pandas 只會(huì)讀取表頭,不會(huì)加載海量的數(shù)據(jù),速度極快!
def update_columns(self):
"""更新列名下拉列表"""
self.column_combo.clear()
if not self.files:
return
try:
# 讀取第一個(gè)文件的表頭作為參考,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 文件或者同時(shí)處理數(shù)十個(gè)文件時(shí),如果在主線程里執(zhí)行,軟件界面就會(huì)“假死”(未響應(yīng))。所以我們繼承 QThread 編寫了一個(gè) ProcessThread,把耗時(shí)的處理工作放到后臺(tái)線程。
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)} 個(gè)文件")
except Exception as e:
self.finished.emit(False, f"處理出錯(cuò): {str(e)}")
3. Pandas 數(shù)據(jù)處理核心邏輯
核心的數(shù)據(jù)處理部分全靠 Pandas。我們遍歷用戶設(shè)定的規(guī)則列表 self.rules,針對(duì)不同的操作類型,調(diào)用相應(yīng)的 Pandas API。比如字符串拼接、str.split 拆分列,以及 pd.to_numeric 進(jìn)行數(shù)值計(jì)算:
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 會(huì)直接返回一個(gè) 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 == "數(shù)值統(tǒng)一加減":
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 環(huán)境的同事也能使用,我們可以使用 PyInstaller 將它打包成一個(gè)獨(dú)立的 EXE 可執(zhí)行文件。
只需在命令行中運(yùn)行以下命令:
pyinstaller --noconfirm --onefile --windowed --icon "修改.ico" --add-data "修改.png;." --name "Excel批量列處理工具" excel_editor.py
--onefile:打包成單一文件--windowed:運(yùn)行時(shí)不顯示黑乎乎的控制臺(tái)黑框--icon和--add-data:給軟件加上好看的圖標(biāo)
打包完成后,在 dist 目錄下就會(huì)生成一個(gè) Excel批量列處理工具.exe,直接雙擊就能愉快地使用了!
結(jié)語
借助 Python 和 Pandas 強(qiáng)大的數(shù)據(jù)處理能力,再搭配 PyQt5 的圖形化界面,我們輕松就把繁瑣的 Excel 處理工作變成了一鍵式的傻瓜工具。不僅自己用著爽,發(fā)給身邊的同事,絕對(duì)能讓你收獲滿滿的贊譽(yù)!
到此這篇關(guān)于Python+PyQt5打造一個(gè)Excel批量列處理工具的文章就介紹到這了,更多相關(guān)Python Excel批量列處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)將單張或多張圖片轉(zhuǎn)PDF
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)將單張或多張圖片轉(zhuǎn)PDF,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-11-11
python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口背景與不規(guī)則窗口實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口背景與不規(guī)則窗口實(shí)例,需要的朋友可以參考下2020-02-02
numpy中的delete刪除數(shù)組整行和整列的實(shí)例
今天小編就為大家分享一篇numpy中的delete刪除數(shù)組整行和整列的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
基于Python實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制
這篇文章主要介紹了基于Python實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制,本文為?HITwh?網(wǎng)絡(luò)空間安全專業(yè)網(wǎng)絡(luò)空間安全設(shè)計(jì)與實(shí)踐選題,主要實(shí)現(xiàn)了遠(yuǎn)程監(jiān)控局域網(wǎng)內(nèi)的主機(jī)桌面與網(wǎng)絡(luò)情況、簡(jiǎn)單鍵鼠控制、遠(yuǎn)程斷網(wǎng)(ARP?攻擊)、數(shù)據(jù)加密傳輸?shù)裙δ埽旅鎭砜纯淳唧w實(shí)現(xiàn)過程吧2022-01-01
手把手教你使用Python解決簡(jiǎn)單的zip文件解壓密碼
本文主要介紹了Python解決簡(jiǎn)單的zip文件解壓密碼,使用的核心模塊是python標(biāo)準(zhǔn)庫(kù)中的zipfile模塊。具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11
GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch
這篇文章主要介紹了GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Python 實(shí)現(xiàn)鍵盤鼠標(biāo)按鍵模擬
這篇文章主要介紹了Python 實(shí)現(xiàn)鍵盤按鍵模擬的方法,幫助大家提高辦公效率,感興趣的朋友可以了解下2020-11-11

