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

使用Python的pandas和xlwings连接受保护Excel时遇com_error如何解决

解决xlwings读取受保护Excel时的com_error错误

这个错误的核心原因是目标Excel文件或工作表处于保护状态,导致xlwings无法访问受保护区域的数据。以下是几种可行的解决方法:

1. 手动解除保护(临时快速方案)

打开目标Excel文件,找到对应工作表的「保护工作表」设置,输入密码解除保护后,再运行Python代码即可读取数据。

2. 代码中自动解除工作表保护(推荐,需知道保护密码)

如果知道工作表的保护密码,可以在代码中先解除保护,读取完数据后再重新保护(可选)。修改后的代码示例:

import pandas as pd
import xlwings as xw
import time

PATH = r"C:\Users\Shaileshbhai\Desktop\Lakhan\dummy.xlsx"
PROTECT_PASSWORD = "你的工作表保护密码"  # 替换为实际密码

wb = xw.Book(PATH)
sheet = wb.sheets["Sheet1"]

# 解除工作表保护
sheet.unprotect(password=PROTECT_PASSWORD)

# 读取数据
df1 = sheet.used_range.options(pd.DataFrame, index=False, header=True).value
print(df1)

def timer():
    while True:
        time.sleep(5)
        # 读取前确保保护已解除(如果期间有人重新保护了工作表)
        sheet.unprotect(password=PROTECT_PASSWORD)
        df1 = sheet.used_range.options(pd.DataFrame, index=False, header=True).value
        print(df1)
        print("****************")

timer()

如果需要读取后重新保护工作表,可以在读取操作后添加sheet.protect(password=PROTECT_PASSWORD)。

3. 处理工作簿级别的保护

如果是整个工作簿被保护(而非单个工作表),需要先解除工作簿保护:

wb.unprotect(password="工作簿保护密码")

之后再进行工作表的读取操作。

额外提示

原代码中递归调用timer(),长时间运行可能触发Python递归深度限制导致RecursionError,上面的示例已改用循环实现定时读取,避免这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:15:02