You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel文件打开时用Python Pandas读取而不报错?

解决Excel打开时Pandas读取文件的权限问题

以下是几种可行的解决方案:

方法一:使用openpyxl只读模式读取

针对.xlsm这类Open XML格式的Excel文件,openpyxl引擎的只读模式可以绕过Excel的独占锁定限制。修改你的读取代码:

import pandas as pd

excelData = pd.read_excel(
    excelPath,
    sheet_name=["Qualifying Results", "Race Results", "Ligadaten"],
    engine="openpyxl",
    read_only=True
)

如果尚未安装openpyxl,先执行pip install openpyxl安装依赖包。

方法二:复制文件到临时目录再读取

若第一种方法不适用,可以先将目标Excel文件复制到临时目录,读取副本文件来避开原文件的锁定:

import pandas as pd
import shutil
import tempfile
import os

# 创建临时目录
with tempfile.TemporaryDirectory() as temp_dir:
    temp_file = os.path.join(temp_dir, "temp_liga.xlsm")
    # 复制原文件到临时路径
    shutil.copy2(excelPath, temp_file)
    # 读取临时文件
    excelData = pd.read_excel(
        temp_file,
        sheet_name=["Qualifying Results", "Race Results", "Ligadaten"]
    )
# 临时目录会在代码块结束后自动销毁

方法三:通过COM接口读取已打开的Excel

如果需要读取Excel当前打开的实时数据(比如用户正在编辑的内容),可以用pywin32直接和已运行的Excel进程交互:

import pandas as pd
import win32com.client as win32

# 连接到已打开的Excel应用程序
excel_app = win32.gencache.EnsureDispatch("Excel.Application")
# 获取目标工作簿(需确保路径与打开的文件一致)
workbook = excel_app.Workbooks(os.path.abspath(excelPath))

# 逐个读取指定工作表到字典
excelData = {}
for sheet_name in ["Qualifying Results", "Race Results", "Ligadaten"]:
    sheet = workbook.Worksheets(sheet_name)
    # 读取已使用的单元格范围
    used_range = sheet.UsedRange
    data = used_range.Value
    # 转换为DataFrame,第一行作为列名
    df = pd.DataFrame(data[1:], columns=data[0])
    excelData[sheet_name] = df

# 释放COM对象,不关闭用户的Excel进程
excel_app = None

注意:该方法仅适用于Windows系统,需先执行pip install pywin32安装依赖。

内容的提问来源于stack exchange,提问作者Frog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:15:42