最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python辦公之實現(xiàn)批量拆分Excel

 更新時間:2026年04月12日 08:06:07   作者:小莊-Python辦公  
這篇文章主要為大家詳細介紹了如何使用Python結合 PyQt5,從零打造一款帶圖形界面的Excel 批量拆分神器,只需點點鼠標,幾秒鐘就能搞定幾小時的工作量

在日常的辦公和數(shù)據(jù)處理中,你是否經(jīng)常遇到這樣的場景:老板扔給你一個包含幾萬行數(shù)據(jù)的總表,讓你按部門、按地區(qū)或者按月份拆分成幾十個甚至上百個單獨的 Excel 文件發(fā)給對應的負責人;又或者,由于系統(tǒng)導入限制,你需要把一個幾十萬行的大表每 1000 行拆分成一個小表。

如果是手動復制粘貼,不僅費時費力,還極容易出錯。作為一名經(jīng)常和數(shù)據(jù)打交道的“打工人”,怎么能被這種機械的體力活打?。拷裉?,我就帶大家用 Python 結合 PyQt5,從零打造一款帶圖形界面的“Excel 批量拆分神器”,只需點點鼠標,幾秒鐘就能搞定幾小時的工作量!

工具核心功能展示

我們先來看看最終做出來的工具長什么樣,以及它能干什么:

  1. 友好的可視化界面 (GUI):告別黑乎乎的命令行,支持直接拖拽文件或點擊選擇文件,操作直觀。
  2. 兩種核心拆分模式
    • 按列拆分:智能讀取表頭,提供下拉框供你選擇需要拆分的列(例如選“部門”列,它就會自動按部門名稱拆分出多個文件)。
    • 按行數(shù)拆分:支持輸入指定的行數(shù)(如每 500 行拆分一個文件)。
  3. 智能命名防沖突:拆分后的文件會自動帶上“序號+分類名”,并且自動過濾了文件名中的非法字符,安全保存。
  4. 實時日志與彈窗提示:拆分進度一目了然,任務完成時會有貼心的彈窗提醒。
  5. 開箱即用的 .exe 程序:利用 PyInstaller 打包,沒有 Python 環(huán)境的同事也能雙擊直接使用。

技術棧揭秘

這套工具的底層邏輯其實非常清晰,主要依賴于以下幾個 Python 明星庫:

  • pandas:數(shù)據(jù)處理界的“扛把子”。用它的 read_excelto_excel 方法,加上簡單的切片和過濾邏輯,輕松完成數(shù)據(jù)的拆分。
  • PyQt5:負責門面擔當。構建出現(xiàn)代化、響應式的桌面應用程序界面。
  • calamine:為了解決傳統(tǒng) openpyxl 讀取大文件較慢的問題,我們在 pandas 中指定了 engine='calamine',讀取速度直接起飛。

核心代碼解析

雖然有幾百行代碼,但最核心的“靈魂”其實都在后臺拆分線程 (SplitWorker) 中。為了不讓界面在處理大文件時卡死,我們必須使用多線程(QThread)。

1. 按列拆分邏輯

如果用戶選擇“按列拆分”,程序首先需要獲取該列的所有唯一值,然后循環(huán)過濾并保存:

# df 是讀取進來的 pandas DataFrame
column_name = self.split_value # 用戶在下拉框選擇的列名

# 獲取該列所有的唯一值(去重)
unique_values = df[column_name].unique()

for i, value in enumerate(unique_values, 1):
    # 過濾出當前分類的數(shù)據(jù)
    subset = df[df[column_name] == value]
    
    # 清理文件名中的非法字符(非常重要的一步,防止保存報錯)
    safe_value = str(value)
    for char in r'\/:*?"<>|':
        safe_value = safe_value.replace(char, '_')
        
    # 組合新文件名并導出
    output_file = os.path.join(self.output_dir, f"{base_name}_{i:03d}_{safe_value}.xlsx")
    subset.to_excel(output_file, index=False)

2. 按行拆分邏輯

如果用戶選擇“按行數(shù)拆分”,則主要利用 pandas 的 iloc 按行索引進行切片:

rows_per_file = int(self.split_value) # 用戶輸入的行數(shù)
total_rows = len(df)
# 計算總共需要拆分出幾個文件
num_files = (total_rows + rows_per_file - 1) // rows_per_file

for i in range(num_files):
    # 計算當前文件的起始和結束索引
    start_idx = i * rows_per_file
    end_idx = min((i + 1) * rows_per_file, total_rows)
    
    # 切片截取數(shù)據(jù)
    subset = df.iloc[start_idx:end_idx]
    
    # 生成序號文件名并導出
    output_file = os.path.join(self.output_dir, f"{base_name}_{i+1:03d}.xlsx")
    subset.to_excel(output_file, index=False)

3. 提升用戶體驗的小細節(jié)

為了讓工具看起來更專業(yè),我們在代碼中加入了很多細節(jié)處理:

智能表頭讀取:每次拖入新文件或修改“表頭行數(shù)”時,程序會只讀取 0 行數(shù)據(jù)nrows=0)來快速獲取列名,并自動更新到下拉框中。

PyInstaller 圖標兼容:使用 sys._MEIPASS 獲取臨時解壓目錄,確保打包成 .exe 后圖標依然能夠正常顯示:

def resource_path(self, relative_path):
    """獲取資源的絕對路徑,兼容PyInstaller打包后的臨時目錄"""
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

如何打包分享給同事?

寫好代碼只是第一步,能讓不懂編程的同事用起來才是真正的“造福人類”。

首先準備一張好看的 .png 圖標,用 Python 轉(zhuǎn)成 .ico 格式:

from PIL import Image
Image.open('拆分行.png').save('icon.ico', format='ICO', sizes=[(256, 256)])

使用 PyInstaller 執(zhí)行一鍵打包:

pyinstaller --noconfirm --onefile --windowed --icon="icon.ico" --add-data="拆分行.png;." --name="Excel批量拆分神器" excel_splitter.py

參數(shù)解釋:--onefile 生成單文件,--windowed 隱藏黑框,--add-data 將圖標資源內(nèi)嵌到程序中。

打包完成后,你會在 dist 文件夾下得到一個名為 Excel批量拆分神器.exe 的文件。直接把它發(fā)給同事,收獲他們崇拜的目光吧!

結語

從一行行重復的復制粘貼,到幾秒鐘批量搞定,Python 在辦公自動化領域的威力不容小覷。通過這個項目,我們不僅復習了 Pandas 的數(shù)據(jù)處理技巧,還實戰(zhàn)演練了 PyQt5 界面開發(fā)和多線程操作。

到此這篇關于Python辦公之實現(xiàn)批量拆分Excel的文章就介紹到這了,更多相關Python批量拆分Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用 Monkey 命令操作屏幕快速滑動

    利用 Monkey 命令操作屏幕快速滑動

    Monkey測試是Android平臺自動化測試的一種手段,通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發(fā)生異常
    2016-12-12
  • Python FTP文件定時自動下載實現(xiàn)過程解析

    Python FTP文件定時自動下載實現(xiàn)過程解析

    這篇文章主要介紹了Python FTP文件定時自動下載實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Django如何與Ajax交互

    Django如何與Ajax交互

    Django前端模板向后端發(fā)送POST請求主要有兩種方式:form表單和ajax請求。本文將詳細介紹Django與Ajax的交互方式,如何通過csrftoken認證,并提供了兩個具體示例。
    2021-04-04
  • Python學習之路安裝pycharm的教程詳解

    Python學習之路安裝pycharm的教程詳解

    pycharm 是一款功能強大的 Python 編輯器,具有跨平臺性。這篇文章主要介紹了Python學習之路安裝pycharm的教程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Python使用matplotlib模塊繪制圖像并設置標題與坐標軸等信息示例

    Python使用matplotlib模塊繪制圖像并設置標題與坐標軸等信息示例

    這篇文章主要介紹了Python使用matplotlib模塊繪制圖像并設置標題與坐標軸等信息,結合實例形式分析了Python中matplotlib模塊進行坐標系圖形繪制的相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • pandas實現(xiàn)excel中的數(shù)據(jù)透視表和Vlookup函數(shù)功能代碼

    pandas實現(xiàn)excel中的數(shù)據(jù)透視表和Vlookup函數(shù)功能代碼

    今天小編就為大家分享一篇pandas實現(xiàn)excel中的數(shù)據(jù)透視表和Vlookup函數(shù)功能代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python中文字符串截取問題

    Python中文字符串截取問題

    web應用難免會截取字符串的需求,Python中截取英文很容易,但是截取utf-8的中文機會截取一半導致一些不是亂碼的亂碼.其實utf8截取很簡單,這里記下來分享給大家
    2015-06-06
  • python pickle存儲、讀取大數(shù)據(jù)量列表、字典數(shù)據(jù)的方法

    python pickle存儲、讀取大數(shù)據(jù)量列表、字典數(shù)據(jù)的方法

    pickle模塊實現(xiàn)了用于序列化和反序列化python對象結構的二進制協(xié)議。這篇文章主要介紹了python pickle存儲、讀取大數(shù)據(jù)量列表、字典的數(shù)據(jù),需要的朋友可以參考下
    2019-07-07
  • TensorFlow tf.nn.max_pool實現(xiàn)池化操作方式

    TensorFlow tf.nn.max_pool實現(xiàn)池化操作方式

    今天小編就為大家分享一篇TensorFlow tf.nn.max_pool實現(xiàn)池化操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python實現(xiàn)百度語音識別api

    python實現(xiàn)百度語音識別api

    這篇文章主要為大家詳細介紹了python實現(xiàn)百度語音識別api,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評論

桂东县| 襄垣县| 天等县| 碌曲县| 北京市| 唐海县| 襄汾县| 永登县| 邢台县| 和平区| 高碑店市| 九江县| 龙泉市| 磐石市| 巴里| 永宁县| 抚顺市| 景洪市| 象州县| 杭锦后旗| 道真| 大庆市| 遵义县| 博客| 通州市| 泰安市| 邵阳县| 铁力市| 灌云县| 和林格尔县| 太原市| 乌拉特前旗| 大竹县| 霸州市| 温宿县| 新竹县| 当雄县| 旬邑县| 弥勒县| 金寨县| 台安县|