Python實(shí)現(xiàn)批量Excel拆分功能
在日常辦公中,我們經(jīng)常需要將包含多個(gè)Sheet頁(yè)的Excel文件拆分成多個(gè)獨(dú)立的Excel文件。例如,當(dāng)我們要把一份Excel表格發(fā)給各部門(mén)確認(rèn)時(shí),出于控制信息知悉范圍、確保數(shù)據(jù)保密性等方面的考慮,每個(gè)部門(mén)僅需查看和確認(rèn)與自己部門(mén)對(duì)應(yīng)的Sheet頁(yè)。手動(dòng)拆分Excel文件非常繁瑣耗時(shí),為了提高效率,我們可以使用Python編寫(xiě)一個(gè)自動(dòng)化小工具,批量拆分Excel文件中的每個(gè)Sheet頁(yè)為獨(dú)立的Excel文件。
本文將分享如何使用Python實(shí)現(xiàn)批量Excel拆分的功能,并提供詳細(xì)的代碼解釋。
1. 需求分析
保持原始Sheet頁(yè)格式: 在拆分過(guò)程中,需要保證每個(gè)獨(dú)立Excel文件中的內(nèi)容格式與原Excel文件中對(duì)應(yīng)Sheet頁(yè)的格式完全一致,包括字體樣式、單元格格式、顏
色設(shè)置、對(duì)齊方式等,避免因格式丟失影響數(shù)據(jù)的查看和分析。
輸出文件管理: 將拆分后的獨(dú)立Excel文件統(tǒng)一存放到指定的輸出文件夾中,便于管理和查找。
2. 安裝依賴庫(kù)
在開(kāi)始編寫(xiě)代碼之前,我們需要安裝一些必要的 Python 庫(kù)。這里我們將使用 pywin32 庫(kù)來(lái)操作Excel文件,使用 tqdm 庫(kù)來(lái)顯示拆分進(jìn)度。你可以通過(guò)以下命令進(jìn)行安裝:
pip install pywin32 tqdm
3. 代碼實(shí)現(xiàn)
以下是完整的Python代碼,用于批量拆分Excel文件中的每個(gè)Sheet頁(yè)為獨(dú)立的Excel文件。代碼中包含了詳細(xì)的中文注釋,方便大家理解。
3.1 sheet2excel.py
import os import shutil import win32com.client from tqdm import tqdm def sheet2excel(input_excel_path, output_path): """ 將Excel文件中的每個(gè)Sheet頁(yè)拆分為獨(dú)立的Excel文件 :param input_excel_path: 輸入的Excel文件路徑 :param output_path: 輸出的文件夾路徑 """ # 獲取當(dāng)前腳本所在的目錄 parent = os.path.dirname(os.path.realpath(__file__)) # 初始化Excel應(yīng)用程序 excel = win32com.client.Dispatch("Excel.Application") excel.Visible = False # 不顯示Excel界面 # 輸出文件夾存在則刪除重新創(chuàng)建 output_dir_path = os.path.join(parent, output_path) if os.path.exists(output_dir_path): shutil.rmtree(output_dir_path) os.makedirs(output_dir_path) try: # 打開(kāi)Excel文件 wb = excel.Workbooks.Open(os.path.join(parent, input_excel_path)) # 遍歷每個(gè)Sheet頁(yè) for sheet in tqdm(wb.Sheets, desc="EXCEL拆分"): # 復(fù)制當(dāng)前Sheet頁(yè)到一個(gè)新的工作簿 sheet.Copy() # 保存新的工作簿為獨(dú)立的Excel文件 excel.ActiveWorkbook.SaveAs(os.path.join(output_dir_path, f"{sheet.Name}.xlsx")) # 關(guān)閉新的工作簿 excel.ActiveWorkbook.Close() # 關(guān)閉原始工作簿 wb.Close() finally: # 退出Excel應(yīng)用程序 excel.Quit() if __name__ == "__main__": # 示例:拆分當(dāng)前目錄下的example.xlsx文件,輸出到output文件夾 sheet2excel("example.xlsx", "output")
3.2 代碼說(shuō)明
1. 函數(shù)定義與路徑處理:
sheet2excel 函數(shù)接收兩個(gè)參數(shù):input_excel_path(輸入的 Excel 文件路徑)和 output_path(輸出的文件夾路徑)。
通過(guò) os.path.dirname(os.path.realpath(__file__)) 獲取當(dāng)前腳本所在的目錄,再使用 os.path.join 函數(shù)將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑,確保在不同操作系統(tǒng)上都能正確處理文件和文件夾路徑。
2. Excel 應(yīng)用程序初始化:
- win32com.client.Dispatch("Excel.Application"):初始化 Excel 應(yīng)用程序?qū)ο?,用于后續(xù)對(duì) Excel 文件的操作。
- excel.Visible = False:將 Excel 應(yīng)用程序設(shè)置為不可見(jiàn),避免在后臺(tái)打開(kāi) Excel 界面,減少對(duì)用戶操作的干擾。
3. 輸出文件夾處理:
- shutil.rmtree(output_dir_path):若輸出文件夾已經(jīng)存在,則刪除該文件夾及其包含的所有內(nèi)容,確保輸出文件夾為空,避免文件沖突。
- os.makedirs(output_dir_path):創(chuàng)建新的輸出文件夾,用于存放拆分后的獨(dú)立 Excel 文件。
4. 文件拆分操作:
- wb = excel.Workbooks.Open(...):打開(kāi)指定的 Excel 文件。
- for sheet in tqdm(wb.Sheets, desc="EXCEL 拆分"):使用 tqdm 庫(kù)遍歷 Excel 文件中的每個(gè) Sheet 頁(yè),并顯示拆分進(jìn)度。
- sheet.Copy():將當(dāng)前 Sheet 頁(yè)復(fù)制到一個(gè)新的工作簿中。
- excel.ActiveWorkbook.SaveAs(...):將新的工作簿保存為獨(dú)立的 Excel 文件,文件名以原 Sheet 頁(yè)的名稱命名。
- excel.ActiveWorkbook.Close():關(guān)閉新的工作簿。
- wb.Close():關(guān)閉原始的 Excel 工作簿。
5. 資源釋放:
excel.Quit():退出 Excel 應(yīng)用程序,釋放相關(guān)資源。
4. 運(yùn)行示例
假設(shè)我們有一個(gè)名為example.xlsx的Excel文件,其中包含三個(gè)Sheet頁(yè):Sheet1、Sheet2和Sheet3。我們可以通過(guò)以下代碼將每個(gè)Sheet頁(yè)拆分為獨(dú)立的Excel文件,并保存到output文件夾中:
if __name__ == "__main__": sheet2excel("example.xlsx", "output")
運(yùn)行上述代碼后,output文件夾中將生成三個(gè)獨(dú)立的Excel文件:Sheet1.xlsx、Sheet2.xlsx和Sheet3.xlsx。在拆分過(guò)程中,你可以在控制臺(tái)看到拆分進(jìn)度的顯示,方便了解拆分工作的進(jìn)展情況。
5. 注意事項(xiàng)
Excel 版本兼容性:此代碼基于 pywin32 庫(kù)操作Excel文件,需要確保你的系統(tǒng)中安裝了Microsoft Excel軟件,并且代碼在不同版本的 Excel上可能存在兼容性問(wèn)題。建議在運(yùn)行代碼前,先在小范圍數(shù)據(jù)上進(jìn)行測(cè)試。
輸出文件夾權(quán)限:確保運(yùn)行代碼的用戶對(duì)輸出文件夾具有讀寫(xiě)和刪除權(quán)限,否則可能會(huì)導(dǎo)致無(wú)法正常創(chuàng)建或刪除輸出文件夾。
數(shù)據(jù)備份:在執(zhí)行拆分操作前,務(wù)必對(duì)原始Excel文件進(jìn)行備份,以防在拆分過(guò)程中出現(xiàn)意外情況導(dǎo)致數(shù)據(jù)丟失或損壞。
6. 總結(jié)
通過(guò)本文介紹的Python代碼,我們可以輕松實(shí)現(xiàn)批量拆分Excel文件的功能。這種方法不僅提高了工作效率,還減少了手動(dòng)操作帶來(lái)的錯(cuò)誤風(fēng)險(xiǎn)。
到此這篇關(guān)于Python實(shí)現(xiàn)批量Excel拆分功能的文章就介紹到這了,更多相關(guān)Python Excel拆分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)線程狀態(tài)監(jiān)測(cè)簡(jiǎn)單示例
這篇文章主要介紹了Python實(shí)現(xiàn)線程狀態(tài)監(jiān)測(cè),結(jié)合簡(jiǎn)單實(shí)例形式分析了Python線程start啟動(dòng)、sleep推遲運(yùn)行、isAlive判斷等方法使用技巧,需要的朋友可以參考下2018-03-03python操作攝像頭截圖實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的例子
這篇文章主要介紹了python操作攝像頭截圖實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的例子,例子中包含了控制攝像頭、寫(xiě)入Windows注冊(cè)表方法等,需要的朋友可以參考下2014-03-03使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問(wèn)題解決
本文主要介紹了使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python字符串切割:str.split()與re.split()的對(duì)比分析
今天小編就為大家分享一篇python字符串切割:str.split()與re.split()的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python獲取當(dāng)前函數(shù)名稱方法實(shí)例分享
這篇文章主要介紹了Python獲取當(dāng)前函數(shù)名稱方法實(shí)例分享,具有一定借鑒價(jià)值2018-01-01python字典中g(shù)et()函數(shù)的基本用法實(shí)例
在字典內(nèi)置的方法中,想說(shuō)的方法為get,這個(gè)方法是通過(guò)鍵來(lái)獲取相應(yīng)的值,但是如果相應(yīng)的鍵不存在則返回None,這篇文章主要給大家介紹了關(guān)于python字典中g(shù)et()函數(shù)的基本用法,需要的朋友可以參考下2022-03-03python實(shí)現(xiàn)定時(shí)同步本機(jī)與北京時(shí)間的方法
這篇文章主要介紹了python實(shí)現(xiàn)定時(shí)同步本機(jī)與北京時(shí)間的方法,涉及Python針對(duì)時(shí)間的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03使用python來(lái)調(diào)用CAN通訊的DLL實(shí)現(xiàn)方法
今天小編就為大家分享一篇使用python來(lái)調(diào)用CAN通訊的DLL實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07