Python合併多個Excel檔案中的指定sheet

2023-10-28 18:01:00

本文將介紹一個用於合併多個Excel檔案中指定sheet的Python程式碼。這個功能可以方便地整理和分析資料。我們將逐步解釋程式碼的每個部分,並提供範例用法。

匯入庫

首先,我們匯入了需要使用的三個庫:ospandastime。這些庫分別用於操作檔案和資料夾、處理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的資料進行合併