Windows下用Pandas读取已打开Excel,如何避免权限拒绝错误?
解决Windows下Pandas读取已打开Excel文件的权限拒绝问题
针对你遇到的Excel文件被锁定导致无法读取/复制的问题,以下是几个实用的解决方案:
1. 开启Excel的共享工作簿功能
这是最直接的方法,允许Excel保持打开状态时其他程序(包括你的脚本)访问文件:
- 打开目标Excel文件,点击「文件」→「选项」→「信任中心」→「信任中心设置」→「受保护的视图」,取消勾选所有受保护视图选项(避免后续权限冲突)。
- 回到Excel主界面,点击「审阅」→「共享工作簿」,勾选「允许多用户同时编辑,同时允许工作簿合并」,点击「确定」后保存文件。
之后即使Excel处于打开状态,pandas的read_excel也能正常读取文件。
2. 使用openpyxl只读模式读取
pandas配合openpyxl引擎的只读模式,可以绕过Excel的文件锁定:
- 先安装openpyxl:
pip install openpyxl - 修改读取代码:
import pandas as pd df = pd.read_excel("your_file.xlsx", engine="openpyxl", read_only=True)
这个模式下openpyxl会以只读方式打开文件,不会触发Excel的独占锁,也不需要关闭Excel。
3. 读取Excel自动生成的临时文件
Windows下开启自动保存后,Excel会在后台生成临时文件(格式为~$your_file.xlsx),你可以直接读取这个临时文件:
- 临时文件默认路径:
C:\Users\<你的用户名>\AppData\Roaming\Microsoft\Excel\ - 代码示例(自动定位临时文件):
import pandas as pd import glob import os # 替换为你的Excel文件名 original_file = "your_file.xlsx" temp_file_pattern = os.path.join(os.environ["APPDATA"], "Microsoft", "Excel", f"~${original_file}") temp_files = glob.glob(temp_file_pattern) if temp_files: df = pd.read_excel(temp_files[0], engine="openpyxl") else: # 临时文件不存在时读取原文件 df = pd.read_excel(original_file)
注意:临时文件是Excel实时备份的副本,内容和原文件一致,但文件名带~$前缀。
4. 改用CSV格式中转
如果你的数据不需要保留复杂Excel格式,可以每次修改后将Excel另存为CSV:
- Excel中点击「文件」→「另存为」,选择CSV格式保存。
- pandas读取CSV文件不会有锁定问题:
df = pd.read_csv("your_file.csv")
这个方法最稳定,适合数据结构简单的场景。
内容的提问来源于stack exchange,提问作者ThaNoob
相关产品推荐
相关产品推荐

