python快速拆分excel文件中的所有sheet表的實用腳本
引言
在數(shù)據(jù)處理、財務分析以及其他領域中,經(jīng)常需要對大型Excel文件進行管理。一個常見的需求是將包含多個工作表(或稱工作簿)的Excel文件拆分成獨立的Excel文件,以便于后續(xù)操作和管理。本文將介紹如何使用Python編寫一個腳本,實現(xiàn)這一功能,并詳細解釋代碼的功能、應用場景以及如何對其進行擴展。
代碼解析
1.導入必要的庫
from tkinter import filedialog, messagebox
這里導入了tkinter庫中的filedialog和messagebox模塊,用于創(chuàng)建用戶界面組件(如文件選擇框)和顯示提示信息。
2.定義打開文件的函數(shù) open_file()
def open_file():
root = tk.Tk()
root.withdraw()
f_path = filedialog.askopenfilename()
return f_path
該函數(shù)使用tkinter中的askopenfilename()方法創(chuàng)建一個文件選擇框,用戶可以選擇任意Excel文件。調用root.withdraw()后隱藏主窗口,返回用戶的選中路徑。
3.定義處理工作表并拆分的函數(shù) sheet2excel()
獲取保存路徑:通過再次使用tkinter中的組件創(chuàng)建一個對話框,允許用戶指定保存的目標目錄。
def save_directory():
root = tk.Tk()
root.withdraw()
f_path = filedialog.askdirectory()
return f_path
讀取原Excel文件
origin_excel = load_workbook(filename=file_path) origin_sheet_names = origin_excel.sheetnames
使用load_workbook()方法讀取Excel文件,并獲取所有工作表(sheet)的名稱。
顯示提示信息:使用messagebox.showinfo()提示用戶當前處理的情況。
messagebox.showinfo('提示', f'一共有{len(origin_sheet_names)}個sheet,名稱分別為:{origin_sheet_names}\n拆分開始')
處理每個工作表并保存為單獨文件:
if len(origin_sheet_names) > 1:
for j in range(len(origin_sheet_names)):
wb = load_workbook(filename=file_path)
sheet = wb[origin_sheet_names[j]]
wb.copy_worksheet(sheet)
new_filename = origin_sheet_names[j] + '.xlsx'
# 刪除多余的工作表
for i in range(len(origin_sheet_names)):
sheet1 = wb[origin_sheet_names[i]]
wb.remove(sheet1)
new_path = save_path + "/" + new_filename
messagebox.showinfo('提示', f"{new_filename} 已保存到{save_path}")
wb.save(filename=new_path)
# 調整工作表名稱字段
new = load_workbook(filename=new_path)
news = new.active
news.title = origin_sheet_names[j]
new.save(filename=new_path)
messagebox.showinfo('提示', '拆分完成!')
else:
raise Exception('提示', f"你的文件只有一個sheet,難道還要拆分嗎?你的文件名{file_path}")
這部分代碼的主要邏輯包括:
- 遍歷每個工作表
- 復制工作表并將其命名為當前工作表的名稱
- 刪除多余的工作表
- 保存到指定目錄,并調整工作表名稱字段以確保文件名正確
應用場景
該腳本適用于以下情況:
- 大型Excel文件處理:當需要將包含多個工作表的大文件拆分成獨立的小文件以便管理或導入其他系統(tǒng)。
- 自動化數(shù)據(jù)遷移:在自動化工作中,經(jīng)常需要將處理后的數(shù)據(jù)保存到特定目錄中。此腳本可以作為基礎,結合自動化流程使用。
- 數(shù)據(jù)清洗與分析:對多個工作表分別進行清洗和分析后,可能需要將結果分開存儲以便后續(xù)操作。
擴展與改寫
1.增加更多功能:
- 添加錯誤處理模塊,以捕捉在復制或保存過程中可能出現(xiàn)的錯誤。
- 支持其他格式文件(如CSV、TXT等)的轉換。
- 提供批量處理選項,例如按名稱或擴展名分類工作表。
2.優(yōu)化性能:
- 使用
xlrd庫或其他高效的Excel解析庫來提高讀取速度。 - 添加日志記錄功能,以追蹤處理過程中的每一步操作,便于調試和監(jiān)控。
3.界面改進:
- 將現(xiàn)有代碼整合到一個完整的GUI應用程序中,增加更多的用戶交互選項(如可以選擇保存格式、顏色調整等)。
- 提供多語言支持或國際化字符串。
完整代碼
# -*- coding: utf-8 -*-
# @Time : 2023-02-11 10:25
# @Author : Kyln.Wu
# @Email : kylnwu@qq.com
# @FileName : 把一個工作簿里的所有sheet拆分為單獨文件.py
# @IDE : PyCharm
from openpyxl import load_workbook
from tkinter import filedialog
import tkinter as tk
from tkinter import messagebox
def open_file():
root = tk.Tk()
root.withdraw()
f_path = filedialog.askopenfilename()
return f_path
def sheet2excel(file_path):
# 先讀取一次文件,獲取sheet表的名稱
messagebox.showinfo("第二步", "請選擇保存的文件夾:")
def save_directory():
root = tk.Tk()
root.withdraw()
f_path = filedialog.askdirectory()
return f_path
save_path = save_directory()
origin_excel = load_workbook(filename=file_path) # 讀取原excel文件
origin_sheet_names = origin_excel.sheetnames # 獲取sheet的名稱
messagebox.showinfo('提示', f'一共有{len(origin_sheet_names)}個sheet,名稱分別為:{origin_sheet_names}\n拆分開始')
if len(origin_sheet_names) > 1: # 如果sheetnames小于1,報錯:該文件不需要拆分
for j in range(len(origin_sheet_names)):
wb = load_workbook(filename=file_path) # 再讀取一次文件,由于每次刪除后需要保存一次,所以不能與上一次一樣
sheet = wb[origin_sheet_names[j]]
wb.copy_worksheet(sheet)
new_filename = origin_sheet_names[j] + '.xlsx' # 新建一個sheet命名的excel文件
for i in range(len(origin_sheet_names)):
sheet1 = wb[origin_sheet_names[i]]
wb.remove(sheet1)
new_path = save_path + "/" + new_filename
messagebox.showinfo('提示', f"{new_filename} 已保存到{save_path}")
wb.save(filename=new_path)
# 由于使用copy_worksheet后,sheet表名有copy字段,這里做個調整
new = load_workbook(filename=new_path)
news = new.active
news.title = origin_sheet_names[j]
new.save(filename=new_path)
messagebox.showinfo('提示', '拆分完成!')
else:
raise Exception('提示', f"你的文件只有一個sheet,難道還要拆分嗎?你的文件名{file_path}")
if __name__ == '__main__':
messagebox.showinfo("第一步", "選擇要拆解的excel文件:")
path = open_file()
sheet2excel(path)
總結
該Python腳本通過簡單的循環(huán)和文件操作實現(xiàn)了將Excel工作簿中的所有工作表拆分成獨立文件的功能。盡管代碼較為基礎,但對于處理需要獨立工作表的場景來說已經(jīng)足夠。通過增加更多的功能和優(yōu)化性能,可以進一步提升腳本的應用價值。
到此這篇關于python快速拆分excel文件中的所有sheet表的實用腳本的文章就介紹到這了,更多相關python拆分excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
卷積神經(jīng)網(wǎng)絡的發(fā)展及各模型的優(yōu)缺點及說明
這篇文章主要介紹了卷積神經(jīng)網(wǎng)絡的發(fā)展及各模型的優(yōu)缺點及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Python + Requests + Unittest接口自動化測試實例分析
這篇文章主要介紹了Python + Requests + Unittest接口自動化測試,結合具體實例形式分析了Python使用Requests與Unittest模塊實現(xiàn)接口自動化測試相關操作技巧,需要的朋友可以參考下2019-12-12
Python?不設計?do-while?循環(huán)結構的理由
Python作為一種語言不支持do-while循環(huán)。?但是,我們可以采用一種變通方法來模擬do-while循環(huán)?。下面通過本文給大家分享下Python?不設計do-while?循環(huán)結構的理由,需要的朋友可以參考下2022-01-01
詳解Python中range()與xrange()的區(qū)別
range()?和?xrange()?是兩個函數(shù),可用于在?Python的?for?循環(huán)中迭代一定次數(shù)。本文將通過示例詳細說說二者的區(qū)別與使用,需要的可以參考一下2022-09-09

