一、問題背景
在使用 Python 開發 Excel 轉 CSV 工具時,直接運行腳本(python script.py)可以正常工作,但通過 PyInstaller 打包成可執行文件后,出現以下報錯:
excel file format cannot be determined, you must specify an engine manually
該問題通常發生在使用pandas.read_excel()讀取 Excel 文件時,打包后的程序無法自動識別文件格式所需的解析引擎。
二、問題原因分析
- Pandas 引擎自動檢測失效
Pandas 處理 Excel 文件時依賴外部庫:
.xlsx格式需openpyxl
.xls格式需xlrd直接運行時 Pandas 會自動檢測擴展名并調用對應引擎,但打包后依賴庫可能未正確包含,導致引擎檢測失敗。 - 打包工具未包含依賴
PyInstaller 默認不會自動識別openpyxl/xlrd等非核心依賴,導致打包后的程序缺少必要模塊。
三、分步解決方案
方案 1:顯式指定 Excel 解析引擎(核心修復)
修改代碼,根據文件擴展名強制指定解析引擎,避免 Pandas 自動檢測:
import pandas as pd
讀取Excel時增加引擎判斷邏輯
if excel_path.lower().endswith(‘.xlsx’):
df = pd.read_excel(excel_path, sheet_name=sheet, engine=‘openpyxl’)
elif excel_path.lower().endswith(‘.xls’):
df