如何在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
相关产品推荐
相关产品推荐

