目錄
Toggle什麼是 openpyxl?適用場景與工具比較
openpyxl 是一套專為 Python 開發者設計的 Excel 處理函式庫,能讀取、寫入 .xlsx、.xlsm、.xltx、.xltm 等現代 Excel 格式(不支援舊版 .xls)。它特別適合需要自動化報表、資料分析、批次處理或整合 Excel 資料至其他系統的場景。
與其他常見工具比較:
| 工具 | 支援格式 | 主要用途 | 優點 | 適用情境 | 
|---|---|---|---|---|
| openpyxl | xlsx, xlsm | 讀寫 Excel | 支援格式豐富、操作彈性高 | 自動化、批次處理、格式控制 | 
| pandas | xlsx, csv等 | 資料分析 | 讀取速度快、資料處理強大 | 資料分析、資料清洗 | 
| xlrd | xls, xlsx(舊) | 只讀 Excel | 輕量、簡單 | 只需讀取舊版 Excel | 
常見限制:
– openpyxl 不支援舊版 .xls 格式。
– 公式僅能讀取字串,無法計算結果。
– 巨集(VBA)無法操作。
產業應用情境:
– 專案管理:自動彙整進度表、產出週報。
– 財務會計:批次讀取多份報表、資料整合。
– 行政庶務:自動化表單資料匯入、批次審核。
openpyxl 安裝與環境需求
安裝步驟
在命令列執行以下指令即可安裝最新版 openpyxl:
pip install openpyxl
版本建議:
建議搭配 Python 3.7 以上版本,確保相容性與效能。
常見安裝問題與解決
- 找不到 pip:請確認 Python 已正確安裝,並將 pip 加入環境變數。
- 權限不足:加上 --user參數或以管理員身份執行。
- 版本衝突:可先執行 pip uninstall openpyxl再重新安裝。
openpyxl 讀取 Excel 基本流程
載入 Excel 檔案
使用 load_workbook 載入檔案:
from openpyxl import load_workbook
file_path = 'example.xlsx'
wb = load_workbook(file_path)
常用參數說明:
| 參數 | 說明 | 範例 | 
|---|---|---|
| read_only | 只讀模式,提升大型檔案讀取效能 | load_workbook(file_path, read_only=True) | 
| data_only | 只讀取公式結果,不讀公式字串 | load_workbook(file_path, data_only=True) | 
| keep_vba | 保留巨集內容(僅 xlsm 有效) | load_workbook(file_path, keep_vba=True) | 
異常處理實例:
try:
    wb = load_workbook(file_path)
except FileNotFoundError:
    print("找不到檔案,請確認路徑。")
except Exception as e:
    print(f"讀取失敗:{e}")
選擇與操作工作表
取得所有工作表名稱
sheet_names = wb.sheetnames
print(sheet_names)
選擇特定工作表
sheet = wb['Sheet1']  # 以名稱選擇
# 或
sheet = wb.active     # 取得預設工作表
產業應用情境:
如需批次處理多個工作表(如月報、部門分頁),可用迴圈依序讀取。
讀取單元格資料
以座標或索引讀取
value_a1 = sheet['A1'].value
value_b2 = sheet.cell(row=2, column=2).value
資料型態與空值處理
- openpyxl 會自動判斷型態(數字、文字、日期等)。
- 空白儲存格會回傳 None。
範例:判斷資料型態與處理空值
cell = sheet['A1']
if cell.value is None:
    print("此格為空")
elif isinstance(cell.value, int):
    print("數字:", cell.value)
elif isinstance(cell.value, str):
    print("文字:", cell.value)
讀取格式化內容
openpyxl 主要取得原始值,若需取得顯示格式(如千分位、日期格式),可參考 cell.number_format 屬性。
進階讀取技巧
迭代與範圍讀取
使用 iter_rows/iter_cols
可高效讀取大量資料,並可指定範圍:
for row in sheet.iter_rows(min_row=2, max_row=10, min_col=1, max_col=3):
    for cell in row:
        print(cell.value)
| 參數 | 說明 | 
|---|---|
| min_row | 起始列 | 
| max_row | 結束列 | 
| min_col | 起始欄 | 
| max_col | 結束欄 | 
效率建議:
– 只需部分資料時,務必設定範圍,避免全表讀取影響效能。
使用座標範圍
for row in sheet['A1:C5']:
    for cell in row:
        print(cell.value)
適合小範圍快速存取,若需大量資料建議用 iter_rows。
讀取合併儲存格、公式、格式化
合併儲存格
合併儲存格僅左上角有值,其餘為 None:
cell = sheet['B2']
if cell.coordinate in sheet.merged_cells:
    print("此格為合併儲存格")
讀取公式與結果
- 預設讀取公式字串(如 =SUM(A1:A5))。
- 若需讀取公式計算後的值,需以 data_only=True載入:
wb = load_workbook(file_path, data_only=True)
注意:
若 Excel 檔案未經 Excel 軟體重新儲存,公式結果可能為 None。
取得格式化資訊
可讀取單元格格式:
cell = sheet['A1']
print(cell.number_format)  # 例如 'yyyy-mm-dd'
只讀模式與大型檔案處理
只讀模式(read_only)
適用於大型檔案,減少記憶體消耗:
wb = load_workbook(file_path, read_only=True)
限制:
只讀模式下無法修改資料、部分屬性不可用。
效能優化建議
- 只讀模式搭配 iter_rows 讀取,效能最佳。
- 避免一次性讀取整個工作表,建議分批處理。
- 若需處理多檔案,建議結合自動化排程工具(如 Monday.com)。
常見錯誤與例外處理
| 錯誤訊息 | 可能原因 | 解決方式 | 
|---|---|---|
| FileNotFoundError | 檔案路徑錯誤 | 檢查路徑、檔名是否正確 | 
| BadZipFile: File is not a zip file | 檔案非 xlsx 格式或損壞 | 確認檔案格式、重新下載 | 
| KeyError: ‘SheetX’ | 工作表名稱錯誤 | 使用 wb.sheetnames確認名稱 | 
| ValueError: openpyxl does not support .xls files | 檔案為舊版 Excel (.xls) | 轉存為 .xlsx 格式 | 
實務建議:
– 讀取前先確認檔案格式與工作表名稱。
– 例外處理可避免批次自動化中斷。
openpyxl 實用應用案例
案例一:批次讀取多份報表
假設有多個部門月報需彙整:
import glob
from openpyxl import load_workbook
files = glob.glob('reports/*.xlsx')
for file in files:
    wb = load_workbook(file, data_only=True)
    sheet = wb.active
    dept = sheet['A1'].value
    value = sheet['B2'].value
    print(f"{dept} 部門本月數值:{value}")
案例二:自動彙整專案進度
將多個專案進度表資料合併至一份總表,提升團隊協作效率。
openpyxl 與其他工具比較
| 工具 | 特色 | 適用時機 | 
|---|---|---|
| openpyxl | 支援格式豐富、可讀寫、格式控制 | 需操作格式、批次自動化、專案管理 | 
| pandas | 讀取速度快、資料分析強 | 需大量資料分析、資料清洗 | 
| xlrd | 輕量、僅讀取 | 只需讀舊版 Excel、無格式需求 | 
選用建議:
– 需處理格式、公式、合併儲存格,建議用 openpyxl。
– 需大量資料分析、轉換,建議用 pandas。
– 只需讀舊版 .xls,可考慮 xlrd。
常見問題 FAQ
openpyxl 能處理多大的 Excel 檔案?
建議單檔不超過數十萬列。若需處理更大檔案,請務必使用 read_only 模式。
如何讀取公式計算結果?
載入檔案時加上 data_only=True,但需確保檔案已由 Excel 軟體儲存過。
為何讀取合併儲存格時只有左上角有值?
Excel 合併儲存格僅左上角儲存實際數值,其餘格會回傳 None。
openpyxl 能否寫入 Excel?
可以,openpyxl 同時支援讀取與寫入。
如何避免記憶體不足?
大型檔案請用 read_only 模式,並分批處理資料。
結論與延伸應用建議
openpyxl 是專案管理、團隊協作與自動化辦公不可或缺的工具,不僅能靈活讀取各類 Excel 檔案,還能結合自動化腳本,提升效率。建議進一步學習 openpyxl 的寫入、格式控制、圖表等功能,並可搭配 Monday.com、ClickUp 等專案管理平台,打造更高效的數據流與協作流程。
 
					 
					 
					