🧠 Windows 執行 Python 出現「找不到 xlsx」錯誤?完整排除教學(FileNotFoundError 完全解析)
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
一、問題現象:Python 可以跑,但程式卻「找不到檔案」
很多初學者第一次在 Windows 執行
.py
程式時,都會遇到一個非常困惑的錯誤:
FileNotFoundError: No Excel files found in D:\ImportFolder
明明:
-
Python 已經安裝成功
-
程式也確實啟動
-
甚至沒有語法錯誤
但程式就是「立刻停止」。
這種情況其實不是 Python 壞掉,也不是電腦問題,而是程式正在找一個不存在的位置。
換句話說:
Python 沒有錯,它只是很誠實地告訴你:「你要我找的東西不在那裡」。
二、為什麼會發生?(新手最容易誤解的觀念)
電腦中的程式不是用「你眼睛看到的資料夾」在工作,
它使用的是
路徑(Path)。
例如你桌面看到:
專案資料
├─ program.py
└─ data.xlsx
你以為程式會讀到
data.xlsx。
但實際上 Python 可能在找:
C:\Windows\System32\data.xlsx
因為它的執行位置不是你想像的那個資料夾。
這就是 90% FileNotFoundError 的真正原因。
三、最典型錯誤寫法
初學者最常寫出這種程式:
DATA_DIR = "D:\\ImportFolder"
files = [f for f in os.listdir(DATA_DIR) if f.endswith(".xlsx")]
if not files:
raise FileNotFoundError("找不到 Excel")
問題是:
你電腦根本沒有
D:\ImportFolder
這個資料夾。
所以程式正確地報錯。
四、真正的問題:程式的「工作位置」與「檔案位置」不同
Windows 在執行 Python 時,有一個概念叫:
工作目錄(Working Directory)
你以為你在資料夾執行程式,
但其實 Windows 可能從別的位置啟動 Python。
因此程式會往錯誤的位置找檔案。
五、工程師正確寫法(推薦做法)
不要寫死磁碟機路徑。
應該讓程式「自動找到自己所在的位置」。
改成這樣:
from pathlib import Path
# 找到目前程式所在資料夾
CURRENT_FOLDER = Path(__file__).parent
# 指定子資料夾
INPUT_FOLDER = CURRENT_FOLDER / "input_data"
excel_files = list(INPUT_FOLDER.glob("*.xlsx"))
if len(excel_files) == 0:
raise RuntimeError("資料夾中沒有任何 Excel 檔案")
對應的資料夾結構:
專案
├─ script.py
└─ input_data
├─ report1.xlsx
└─ report2.xlsx
這樣無論:
-
換電腦
-
換磁碟
-
用排程
-
用批次檔
都能正常執行。
這是實務開發的標準寫法。
六、另一個隱藏陷阱:Excel 其實存在,但仍報錯
你可能會遇到更奇怪的情況:
資料夾裡明明有 Excel,
程式仍然說找不到。
原因是:
Excel 開著時,會產生暫存檔
例如:
~$sales.xlsx
這不是正式檔案,而是 Excel 的鎖定檔。
解決方式:
valid_files = [
f for f in INPUT_FOLDER.glob("*.xlsx")
if not f.name.startswith("~$")
]
七、如何確認 Python 到底在找哪裡?
這一步非常重要,也是工程師排錯的第一步。
加入除錯訊息:
import os
print("目前執行位置:", os.getcwd())
print("資料夾是否存在:", INPUT_FOLDER.exists())
print("實際路徑:", INPUT_FOLDER)
你會立刻知道:
程式正在看哪個資料夾,而不是你以為的那個。
八、最簡單的檢查清單(Checklist)
當你遇到 FileNotFoundError,依序檢查:
-
路徑是否存在
-
副檔名是否正確(.xlsx / .xls)
-
Excel 是否開啟
-
程式執行位置是否正確
-
是否用排程執行(排程最常發生)
九、為什麼工程師不建議寫死路徑?
很多人會想:
直接指定磁碟機不就好了?
錯。
在企業環境會出現:
-
伺服器沒有 D 槽
-
同事電腦是 E 槽
-
排程服務帳號沒有權限
-
網路磁碟尚未掛載
因此寫死路徑的程式,幾乎一定在部署時壞掉。
這也是自動化專案最常見的失敗原因之一。
十、結論
FileNotFoundError
並不可怕,它其實是:
Python 在保護你的資料處理流程。
真正的問題通常不是程式,而是「路徑觀念」。
只要記住一句話:
不要讓程式找檔案,要讓程式先找到自己。
當程式能知道自己的位置,就能永遠找到資料。
如果你正在學習 Python 自動化、報表、資料匯入或批次處理,
理解「路徑」會比學任何語法都更重要。
這一步跨過去,你就從「能寫程式」變成「會寫工具」的工程師了。
留言
張貼留言