使用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
相关产品推荐
相关产品推荐

