Windows环境下Xlwings解除工作表保护时程序无响应问题求助
xlwings解除工作表保护时程序无响应的解决方案
在Windows系统中使用xlwings执行代码时,解除工作表保护的步骤会导致程序陷入无响应状态,既不抛出异常,Excel也没有弹窗,但手动输入正确密码可以正常移除保护。相关代码如下:
with xw.App() as app: wb = app.books.open(local_filename) alerts = wb.api.Application.DisplayAlerts wb.api.Application.DisplayAlerts = False ws_data = wb.sheets["Data Input (Do not rename)"] if wb.api.ProtectStructure: wb.api.Unprotect(Password="xxx") if ws_data.api.ProtectContents: ws_data.api.unprotect(Password="xxx") # 此处无限挂起
解决方案
改用xlwings原生
unprotect方法,避免直接调用底层API:
将ws_data.api.unprotect(Password="xxx")替换为ws_data.unprotect(password="xxx"),原生方法已封装稳定的底层逻辑,减少冲突概率。规范设置
display_alerts:
直接通过app对象设置关闭提示,而非通过工作簿的API,避免上下文冲突:with xw.App(display_alerts=False) as app: wb = app.books.open(local_filename) ws_data = wb.sheets["Data Input (Do not rename)"] if wb.api.ProtectStructure: wb.unprotect(password="xxx") if ws_data.api.ProtectContents: ws_data.unprotect(password="xxx")确保以可编辑模式打开工作簿:
打开文件时指定read_only=False,避免只读模式导致的保护解除异常:wb = app.books.open(local_filename, read_only=False)核对密码大小写:
Excel保护密码区分大小写,确保代码中的密码与设置保护时完全一致,包括特殊字符和大小写格式。
内容的提问来源于stack exchange,提问作者smackenzie
相关产品推荐
相关产品推荐

