本文將介紹一個用於合併多個Excel檔案中指定sheet的Python程式碼。這個功能可以方便地整理和分析資料。我們將逐步解釋程式碼的每個部分,並提供示例用法。
匯入庫
首先,我們匯入了需要使用的三個庫:os
、pandas
和time
。這些庫分別用於操作檔案和資料夾、處理Excel檔案以及計算程式執行時間。
import os
import pandas as pd
import time
定義函式
我們定義了一個名為merge_excel_sheets
的函式,用於將多個Excel檔案中的指定sheet合併到一個新的Excel檔案中。該函式接受三個引數:folder_path
(資料夾路徑)、excel_list
(包含要合併的Excel檔案和sheet名的列表)和output_file
(輸出檔案路徑)。
def merge_excel_sheets(folder_path, excel_list, output_file):
start_time = time.time()
with pd.ExcelWriter(output_file) as writer:
for excel_name, sheet_name in excel_list:
file_path = os.path.join(folder_path, excel_name)
df = pd.read_excel(file_path, sheet_name=sheet_name)
sheet_name_combined = f"{excel_name[:-5]}-{sheet_name}"
df.to_excel(writer, sheet_name=sheet_name_combined, index=False)
end_time = time.time()
execution_time = end_time - start_time
print(f"程式執行時間:{execution_time}秒")
在函式內部,我們首先記錄程式開始執行的時間。然後,我們使用pd.ExcelWriter
建立一個空的Excel Writer物件,用於寫入合併後的資料。
start_time = time.time()
with pd.ExcelWriter(output_file) as writer:
接下來,我們使用一個迴圈來處理每個Excel檔案和sheet。對於每個檔案和sheet,我們構造完整的檔案路徑,並使用pd.read_excel
讀取資料並儲存為DataFrame物件。
for excel_name, sheet_name in excel_list:
file_path = os.path.join(folder_path, excel_name)
df = pd.read_excel(file_path, sheet_name=sheet_name)
然後,我們構造合併後的sheet名稱,格式為"原檔名-原sheet名",並使用df.to_excel
將DataFrame物件中的資料寫入到指定的sheet中。
sheet_name_combined = f"{excel_name[:-5]}-{sheet_name}"
df.to_excel(writer, sheet_name=sheet_name_combined, index=False)
最後,我們計算程式執行的時間,並將其列印出來。
end_time = time.time()
execution_time = end_time - start_time
print(f"程式執行時間:{execution_time}秒")
示例用法
我們提供了一個示例用法,包括資料夾路徑、要合併的Excel檔案和sheet的列表,以及輸出檔案路徑。透過呼叫merge_excel_sheets
函式,我們可以執行合併操作。
folder_path = "E:\\工作內容"
excel_list = [
("一店9月.xlsx", "原始資料"),
("二店9月.xlsx", "原始"),
("三店9月.xlsx", "原始資料"),
("四店9月.xlsx", "原始資料"),
("五店9月-離職.xlsx", "原始資料")
]
output_file = os.path.join(folder_path, "output.xlsx")
merge_excel_sheets(folder_path, excel_list, output_file)
完整程式碼
import os
import pandas as pd # 匯入pandas庫
import time # 匯入時間庫,用於計算程式執行時間
def merge_excel_sheets(folder_path, excel_list, output_file):
start_time = time.time() # 記錄程式開始執行的時間
# 建立一個空的Excel Writer物件,用於寫入合併後的資料
with pd.ExcelWriter(output_file) as writer:
# 迴圈處理每個Excel檔案和sheet
for excel_name, sheet_name in excel_list:
# 根據檔名和資料夾路徑,構造完整的檔案路徑
file_path = os.path.join(folder_path, excel_name)
# 讀取指定Excel檔案中指定sheet的資料,並儲存為DataFrame型別的物件
df = pd.read_excel(file_path, sheet_name=sheet_name)
# 構造合併後的sheet名稱,格式為"原檔名-原sheet名"
sheet_name_combined = f"{excel_name[:-5]}-{sheet_name}"
# 將DataFrame物件中的資料寫入到指定sheet中
df.to_excel(writer, sheet_name=sheet_name_combined, index=False)
end_time = time.time() # 記錄程式結束執行的時間
execution_time = end_time - start_time # 計算程式執行的時間
print(f"程式執行時間:{execution_time}秒") # 輸出程式執行的時間
# 示例用法
folder_path = "E:\\工作內容"
excel_list = [
("一店9月.xlsx", "原始資料"),
("二店9月.xlsx", "原始"),
("三店9月.xlsx", "原始資料"),
("四店9月.xlsx", "原始資料"),
("五店9月-離職.xlsx", "原始資料")
]
output_file = os.path.join(folder_path, "output.xlsx")
merge_excel_sheets(folder_path, excel_list, output_file) # 呼叫合併函式,將指定的Excel檔案中指定sheet的資料進行合併