使用xlwings读取受保护Excel单元格批注返回None的问题求助
解决xlwings读取加密Excel单元格批注返回None的问题
可能原因及解决方案
1. 混淆了Excel的两种批注类型
Excel存在两种批注形式:
- 传统批注(Note):旧版Excel的批注样式,对应xlwings的
note属性 - 现代评论(Comment):新版Excel的评论功能,对应xlwings的
comment属性
若你的单元格使用的是现代评论,调用note会返回None。修改代码,分别尝试读取两种类型:
import xlwings as xw PATH = 'C:/Users/Hendo/Pictures/Sample.xlsx' psw = '1234' wb = xw.Book(PATH, password=psw) sheet = wb.sheets['Sheet1'] # 优先读取现代评论 if sheet.range('H15').comment: print(sheet.range('H15').comment.text) # 再读取传统批注 elif sheet.range('H15').note: print(sheet.range('H15').note.text) else: print("该单元格无批注或评论")
2. 升级xlwings版本
旧版本xlwings对加密文件的批注读取可能存在兼容性问题,执行以下命令升级到最新版:
pip install --upgrade xlwings
3. 处理工作表保护
若目标工作表设置了保护密码,需先解除保护再读取批注:
import xlwings as xw PATH = 'C:/Users/Hendo/Pictures/Sample.xlsx' psw = '1234' sheet_psw = '工作表保护密码' # 替换为实际密码 wb = xw.Book(PATH, password=psw) sheet = wb.sheets['Sheet1'] # 解除工作表保护 sheet.unprotect(password=sheet_psw) # 读取批注 if sheet.range('H15').comment: print(sheet.range('H15').comment.text) elif sheet.range('H15').note: print(sheet.range('H15').note.text)
内容的提问来源于stack exchange,提问作者Henrique Honorato Cruvinel
相关产品推荐
相关产品推荐

