如何在 xlwings 中正确读取受保护 Excel 工作表中的单元格批注
使用xlwings读取受保护Excel工作表的批注时,直接调用range.note会返回None。正确方法是通过.api.Comment.Text()调用底层COM接口,即可绕过保护限制。需注意仅支持Windows桌面版Excel,并用try/except处理无批注异常。密码须在打开工作簿时传入。
在使用 xlwings 处理密码保护的 Excel 文件时,很多人会踩的一个坑是:直接调用 range.note 去读取批注,结果返回 None,明明单元格里明明有批注,却死活读不出来。这其实不是 bug,而是 .note 这个属性本身就比较“浅”——它是 xlwings 封装的一个轻量级只读接口,不会穿透 Excel 的保护层。而真正的批注对象,藏得更深,需要通过底层的 COM 接口才能访问。
那该怎么办?核心思路是:绕过外层封装,直接调用 Excel 应用程序的原生 API。具体来说,就是使用 .api.Comment.Text() 方法。注意大小写和括号,它直接跟 Excel 的 COM 对象对话,只要工作簿已经用密码成功打开,就能正常读取,不受保护限制。下面是一个标准示例:
import xlwings as xw
PATH = r'C:/Users/Hendo/Pictures/Sample.xlsx'
psw = '1234'
wb = xw.Book(PATH, password=psw)
sheet = wb.sheets['Sheet1']
# ✅ 正确:通过 COM 接口读取批注文本
try:
comment_text = sheet.range('H15').api.Comment.Text()
print("批注内容:", comment_text)
except AttributeError:
print("H15 单元格无批注")
print("单元格值:", sheet.range('H15').value)
有几个关键点需要留意:
- 这个方法只适用于 Windows 系统 + Excel 桌面版,因为依赖 COM 接口。
- 确保 Excel 已安装,并且 xlwings 的后端是默认的
app。 - 如果单元格没有批注,
.api.Comment会直接抛出AttributeError,所以必须用try/except兜底。 - 默认返回的是纯文本内容。如果你还需要作者、时间等元信息,可以访问
cmt.Author、cmt.Date等属性,下面批量方案里有具体写法。
如果你需要一次性提取全工作簿所有批注,包括位置、作者和内容,可以参考这个批量遍历的版本:
import xlwings as xw
excel_file = r'C:/Users/Hendo/Pictures/Sample.xlsx'
with xw.App(visible=False) as app:
wb = xw.Book(excel_file, password='1234') # ⚠️ 密码必须传入此处!
for sheet in wb.sheets:
print(f"---- 工作表 '{sheet.name}' ----")
# 检查该表是否存在批注
if sheet.api.Comments.Count > 0:
for cmt in sheet.api.Comments:
addr = cmt.Parent.Address.replace('$', '') # 如 'H15'
try:
text = cmt.Text()
author = cmt.Author
print(f"? 单元格: {addr}")
print(f"? 作者: {author}")
print(f"? 内容: {text}")
print("-" * 40)
except Exception as e:
print(f"[警告] 读取 {addr} 批注失败: {e}")
else:
print("→ 本工作表无批注")
wb.close()
总结下来,就几条核心原则:
- ❌ 别用
range.note处理受保护工作表的批注,它拿不到数据。 - ✅ 坚持走
.api.Comment.Text()路线,并配合异常处理。 - ? 密码必须在
xw.Book(..., password=...)中传入,否则 API 调用会失败。 - ? 批量处理时,建议关闭
visible=True,并显式调用close()关闭工作簿,避免后台 Excel 进程残留。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。
SketchUp Pro 是面向建筑、室内、景观、施工和产品设计等专业场景的三维建模工具,提供桌面建模、LayOut 二维文档、模型资源库、扩展程序及云端协作能力。其操作逻辑直观,适合从概念推敲、空间规划到图纸表达和方案汇报的完整工作流程。
AutoCAD LT 是 Autodesk 推出的专业二维 CAD 软件,适合建筑师、工程师、施工人员和设计师完成精确绘图、标注及文档编制。它支持 DWG 工作流、智能块、图形比较、计数、表格和 AutoLISP 自动化,














