用 Python 管理 Excel 批注:添加作者信息、设置样式与批量删除

江屿
江屿
发布时间:2026-08-22| 95人浏览过
原创

前言

Excel 批注很适合做数据说明和审核留痕,但一旦进入多人协作或批量校对阶段,手工维护很快就会变得低效。本文用 Spire.XLS for Python 把批注的创建、富文本样式、显隐控制、读取导出和删除维护串起来讲清楚,并补充批量删除时最容易忽略的索引变化问题,方便你判断哪些操作适合直接写进自动化脚本。

在 Excel 协作和审核场景里,批注最大的价值,是在不改动单元格原始数据的前提下补充说明、追踪责任人和记录处理意见。手工维护少量批注不难,但一旦表格进入多人协作、反复校对或批量审计阶段,批注的新增、格式统一、读取导出和集中清理就很适合交给 Python 自动完成。本文基于 Spire.XLS for Python,按“先创建、再美化、再维护”的顺序,整理 Excel 批注的常见操作,并说明各接口适合解决什么问题、哪些细节需要特别注意。

环境准备:先把批注操作能力接入脚本

本文使用的库是 Spire.XLS for Python。它提供了 CellRange.Comment 属性和 Comments 集合,适合对单个单元格批注和整张工作表的批注进行统一处理。

安装命令如下:

pip install Spire.XLS

脚本中导入模块后,就可以开始处理 Excel 文件:

from spire.xls import *
from spire.xls.common import *

后续示例都围绕 Workbook、工作表对象以及单元格的 Comment 或 AddComment() 方法展开。

给单元格添加带作者信息的批注

如果表格要经过多人审核,批注里最好明确写出作者。这样后续回看时,能直接判断这条意见是谁添加的。Excel 对这类格式有一套常见约定:批注内容写成“作者名 + 冒号 + 换行 + 正文”,Excel 会把作者部分按批注头部来处理,阅读体验也更清晰。

展示 Excel 批注在创建时可同时设置作者、文本、宽度和字体样式的结构化信息图。
带作者批注的组成与设置项带作者批注的核心是文本组织方式与富文本局部加粗,两者一起决定 Excel 中的显示效果。

Spire.XLS 可以通过 CellRange.AddComment() 创建批注,再分别设置文本、宽度和默认显示状态:

from spire.xls import *
from spire.xls.common import *

inputFile = "/示例.xlsx"
outputFile = "/AddCommentWithAuthor.xlsx"

# 创建 Workbook 并加载文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 获取目标单元格
range = sheet.Range["C1"]

# 设置作者和批注内容
author = "E-iceblue"
text = "这是一个演示如何添加带有可编辑作者属性的批注示例。"

# 添加批注并设置属性
comment = range.AddComment()
comment.Width = 200
comment.Visible = True
comment.Text = author + ":n" + text

# 将作者姓名设置为粗体
font = workbook.CreateFont()
font.FontName = "Tahoma"
font.KnownColor = ExcelColors.Black
font.IsBold = True
comment.RichText.SetFont(0, len(author), font)

# 保存文档
workbook.Sa veToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

这里的关键点有三个:

作者信息写在批注开头

comment.Text = author + ":n" + text 用的是“作者 + 正文”的组织方式。原文示例保留了 :n 这一写法,实际使用时应特别核对换行符是否符合你的脚本环境和库要求。

展示 Excel 富文本批注与批注框外观设置的关系图,突出字符区间着色和背景填充。
富文本与批注框样式的双层控制当批注既要表达层级,又要提醒优先级时,文字富文本和批注框外观通常需要配合使用。

批注框可直接设置尺寸和可见性

comment.Width = 200 用来控制批注框宽度,comment.Visible = True 则表示打开 Excel 时批注默认显示,而不是悬停后才出现。

展示工作表批注集合的读取、修改、删除和批量处理注意事项的信息图。
批注集合的维护逻辑与风险点进入维护阶段后,真正影响稳定性的不是单条修改,而是集合索引变化和批量处理方式。

作者名可以单独加粗

comment.RichText.SetFont(0, len(author), font) 通过富文本接口只修改作者这段文字的字体样式。这样既保留正文样式,又能让作者名更醒目。

需要突出重点时,如何设置富文本和批注外观

当批注内容较长,或者同一条批注里需要区分风险项、结论和补充说明时,纯文本就不够用了。这时可以分别处理两类样式:一类是批注文字本身的富文本格式,另一类是批注框的外观,例如背景色和默认显示状态。

在同一条批注里设置不同文字颜色

Spire.XLS 允许为批注中的不同字符区间分别指定字体。做法是先创建 ExcelFont 对象,再用 RichText.SetFont() 应用到指定区间。

from spire.xls import *
from spire.xls.common import *

inputFile = "示例.xlsx"
outputFile = "RichTextComment.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile)

sheet = workbook.Worksheets[0]

# 创建三种不同颜色的字体
fontOrange = workbook.CreateFont()
fontOrange.FontName = "Arial"
fontOrange.Size = 11
fontOrange.KnownColor = ExcelColors.Orange

fontBlue = workbook.CreateFont()
fontBlue.KnownColor = ExcelColors.LightBlue

fontGreen = workbook.CreateFont()
fontGreen.KnownColor = ExcelColors.LightGreen

# 在 B12 单元格添加富文本批注
range = sheet.Range["B12"]
range.Text = "富文本批注示例"
range.Comment.RichText.Text = "Rich text comment"

# 对批注中不同字符区间应用不同字体颜色
range.Comment.RichText.SetFont(0, 4, fontGreen)   # 第 0-4 个字符设为绿色
range.Comment.RichText.SetFont(5, 9, fontBlue)    # 第 5-9 个字符设为蓝色

workbook.Sa veToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

这段代码的重点是“按字符索引分段设置样式”。原文中指出,"Rich text comment" 共 17 个字符,通过两次 SetFont() 调用,将前 5 个字符和后续部分分别设置为不同颜色。对于需要高亮关键词、状态标签或错误级别的批注,这种方式很实用。

调整批注框颜色和默认显示状态

如果希望重点批注在打开工作簿时就被看见,还可以进一步设置批注框背景色和显示属性:

from spire.xls import *
from spire.xls.common import *

inputFile = "示例.xlsx"
outputFile = "/SetCommentFillColor.xlsx"

# 创建 Workbook 并加载文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 创建字体
font = workbook.CreateFont()
font.FontName = "Arial"
font.Size = 11
font.KnownColor = ExcelColors.Orange

# 在 A1 单元格添加批注
range = sheet.Range["A1"]
range.Comment.Text = "这是一个批注"
range.Comment.RichText.SetFont(0, len(range.Comment.Text) - 1, font)

# 设置批注框填充颜色
range.Comment.Fill.FillType = ShapeFillType.SolidColor
range.Comment.Fill.ForeColor = Color.get_SkyBlue()
range.Comment.Visible = True

workbook.Sa veToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

Fill.FillType = ShapeFillType.SolidColor 表示使用纯色填充,Fill.ForeColor = Color.get_SkyBlue() 将批注框背景设为天蓝色。再配合 Visible = True,就能把关键意见固定展示出来。

如果一张工作表中批注很多,通常不建议全部显示。更合理的做法是,只让高优先级批注保持可见,普通批注仍采用默认隐藏状态,以免遮挡单元格内容。

批注多了以后,怎么修改、删除和避免索引出错

批注真正进入业务流程后,后期维护往往比创建更频繁。比如审核意见更新、重复批注清理、关闭周期后统一删除历史说明。这类操作可以直接使用工作表上的 Comments 集合完成。

from spire.xls import *
from spire.xls.common import *

inputFile = "./Data/CommentSample.xlsx"
outputFile = "EditAndRemoveComment.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile)

# 获取第一个工作表的所有批注
comments = workbook.Worksheets[0].Comments

# 修改第一条批注的内容
comments[0].Text = "该批注内容已被更新。"

# 删除第二条批注
comments[1].Remove()

workbook.Sa veToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

这段代码展示了两种最直接的维护方式:

按索引修改已有批注内容

comments[0].Text 可以直接改写已有批注文本,适合对审核意见做修订或追加标准化描述。

按索引删除单条批注

comments[1].Remove() 会将该批注从工作表中彻底移除。如果只想定位某个单元格上的批注,也可以调用 CellRange.Comment.Remove(),避免先遍历整个集合。

批量删除时要注意索引重排

这一点很关键:调用 Remove() 后,Comments 集合中的索引会立即重新排列。原来排在后面的元素会前移,所以如果你要连续删除多条批注,建议从最后一个开始倒序遍历,避免跳项或误删。

实用技巧:读取内容、控制显隐、封装批量添加

除了增删改,批注还有一些很常见的配套操作,比如导出内容、按阶段切换显示状态,以及为一批单元格统一添加同样格式的批注。

读取批注内容用于审计或导出

如果需要把批注内容输出到日志、文本文件或审计结果中,可以遍历工作表的 Comments 集合,并读取 Comment.Text。原文也提到,如果要保留格式信息,还可以使用 Comment.RichText.RtfText。

sheet = workbook.Worksheets[0]
for i in range(len(sheet.Comments)):
    comment = sheet.Comments[i]
    print(f"批注 {i}: {comment.Text}")

这类遍历很适合和 Python 的文件写入、数据库入库或审计流水结合使用。

按需显示或隐藏批注,减少遮挡

批注多的时候,全部展开会严重影响阅读。可以通过属性控制单条批注的显示状态:

# 隐藏第二条批注
sheet.Comments[1].IsVisible = False
# 显示第三条批注
sheet.Comments[2].IsVisible = True

这种做法适合审核流转中的分阶段处理,例如只显示当前待办批注,其他批注暂时隐藏。

封装函数,批量生成统一格式的批注

如果多个单元格都需要写入类似格式的批注,最好把逻辑封装成函数,后续只传入单元格地址、作者和正文即可:

def add_comment(sheet, cell_address, author, text, fill_color=None):
    cell = sheet.Range[cell_address]
    comment = cell.AddComment()
    comment.Text = f"{author}:n{text}"
    comment.Width = 200
    if fill_color:
        comment.Fill.FillType = ShapeFillType.SolidColor
        comment.Fill.ForeColor = fill_color
    return comment

这个函数保留了原文中的写法,核心价值在于把“创建批注、设置文本、统一宽度、按需填充颜色”放到一个入口里。后续结合单元格遍历,就能对异常数据、缺失数据或审核节点批量打标。

总结:把 Excel 批注纳入可维护的自动化流程

从实际使用角度看,Python 处理 Excel 批注并不只是“能不能加上一条说明”,而是能否把批注纳入完整的数据协作流程。Spire.XLS for Python 提供的接口已经覆盖了这一流程中的大部分环节:你可以创建带作者信息的批注,设置富文本和批注框样式,读取批注内容做后续处理,也可以按索引或按单元格删除、更新已有批注。

如果你的表格经常经历录入、审核、复核和归档几个阶段,那么把这些操作统一写进脚本,通常比手工维护更稳定,也更容易保持格式一致。真正需要特别注意的,主要是批量删除时的索引变化,以及富文本字符区间的边界是否与实际内容对应。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。