Python代碼實現(xiàn)添加、刪除和修改Excel批注
如果你經(jīng)常處理Excel數(shù)據(jù),一定見過單元格右上角那個紅色小三角——那就是批注(Comment)。批注在團隊協(xié)作、數(shù)據(jù)審核、報表說明等場景下特別有用。但手動添加批注效率太低,特別是需要批量處理時。
今天分享一下如何用Python代碼操作Excel批注,從最簡單的添加文本到高級的富文本格式化、圖片背景、位置控制等。
先說說批注的應(yīng)用場景
在實際工作中,批注主要用在這些地方:
- 數(shù)據(jù)審核:標注異常數(shù)據(jù)、說明計算邏輯
- 團隊協(xié)作:留下修改建議、討論記錄
- 模板說明:解釋字段含義、填寫規(guī)范
- 審計追蹤:記錄數(shù)據(jù)來源、處理過程
- 可視化增強:用圖片批注做品牌標識
理解了用途,才知道什么時候該用批注,什么時候該用其他方式(比如單獨的說明Sheet)。
環(huán)境準備
在開始編寫代碼之前,需要先準備好 Python 環(huán)境并安裝用于操作 Excel 文件的庫。本文示例使用的是 Spire.XLS for Python,它可以在不依賴 Microsoft Excel 的情況下創(chuàng)建、讀取、編輯和保存 Excel 文件,適合用于服務(wù)器端報表處理、批量數(shù)據(jù)審核和自動化辦公場景。
1. 安裝 Python 庫
可以使用 pip 安裝 Spire.XLS for Python:
pip install spire.xls
安裝完成后,可以在 Python 腳本中導(dǎo)入相關(guān)類:
from spire.xls import Workbook, ExcelVersion
其中:
- ?
?Workbook?? 用于創(chuàng)建或加載 Excel 工作簿; - ?
?ExcelVersion?? 用于指定保存文件時的 Excel 格式,例如 ??.xlsx??; - 在涉及顏色、文本旋轉(zhuǎn)、對齊方式等高級設(shè)置時,還需要額外導(dǎo)入 ?
?Color??、??ExcelColors??、??TextRotationType?? 等類。
2. 準備測試文件
如果示例中使用的是新建工作簿,可以直接運行代碼生成 Excel 文件;如果代碼中調(diào)用了 ??LoadFromFile()?? 方法,則需要提前準備一個 Excel 文件,例如:
workbook.LoadFromFile("data.xlsx")
這表示程序會從當前腳本所在目錄讀取 ??data.xlsx??。如果文件不在同一目錄,需要改為完整路徑,例如:
workbook.LoadFromFile(r"C:\Users\Administrator\Desktop\data.xlsx")
3. 關(guān)于輸出文件格式
本文中的示例大多使用以下方式保存結(jié)果:
workbook.SaveToFile("output.xlsx", ExcelVersion.Version2013)
這里的 ??ExcelVersion.Version2013?? 表示將文件保存為較新的 ??.xlsx?? 格式,適合在 Microsoft Excel 2013 及以上版本中打開。如果你需要兼容更早版本,也可以根據(jù)實際需求選擇其他 Excel 版本參數(shù)。
一、最基礎(chǔ)的:添加批注
添加批注是操作 Excel 批注的基礎(chǔ)。通常的流程是:先創(chuàng)建或加載一個工作簿,然后獲取目標工作表和單元格,最后通過 ??AddComment()?? 方法為單元格添加批注對象。創(chuàng)建批注后,可以設(shè)置批注文本、顯示狀態(tài)、大小以及富文本格式。
下面先從最簡單的文本批注開始。
1.1 簡單文本批注
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 在C1單元格添加批注
cell = sheet.Range["C1"]
comment = cell.AddComment()
comment.Text = "這是簡單的批注內(nèi)容"
# 默認批注是隱藏的,鼠標懸停才顯示
# 如果想一直顯示:
comment.Visible = True
workbook.SaveToFile("simple_comment.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
就這么簡單。但實際項目中,我們通常需要更多控制。
1.2 帶作者信息的批注
在團隊協(xié)作或數(shù)據(jù)審核場景中,單純寫一句說明往往不夠清晰。為了方便后續(xù)追蹤,通常會在批注中加入作者、審核時間或處理狀態(tài)等信息。Spire.XLS 不會強制批注必須包含作者字段,因此可以通過文本格式自行組織,例如使用“作者 + 換行 + 批注內(nèi)容”的形式。
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
workbook.LoadFromFile("data.xlsx")
sheet = workbook.Worksheets[0]
# 獲取要添加批注的單元格
cell = sheet.Range["C1"]
# 設(shè)置作者和內(nèi)容
author = "張三"
text = "這個數(shù)據(jù)需要進一步核實"
comment = cell.AddComment()
comment.Width = 200
comment.Visible = True
# 格式:作者 + 換行 + 內(nèi)容
comment.Text = f"{author}:\n{text}"
# 讓作者名字加粗顯示
font = workbook.CreateFont()
font.FontName = "Tahoma"
font.IsBold = True
comment.RichText.SetFont(0, len(author), font)
workbook.SaveToFile("comment_with_author.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
為什么要區(qū)分作者? 多人協(xié)作時,一眼就能看出是誰留的言。
二、富文本批注:讓內(nèi)容更有層次
普通批注所有文字都一樣,但有時候需要強調(diào)重點、區(qū)分不同部分。這時候用富文本。
當批注內(nèi)容較長,或者需要突出“警告”“已審核”“待確認”等不同信息時,普通純文本批注的可讀性會比較有限。此時可以使用富文本批注,為批注中的不同文本片段設(shè)置不同字體、顏色、字號或加粗效果。
富文本批注的核心思路是:先設(shè)置完整的批注文本,再通過 ??RichText.SetFont()?? 方法為指定字符范圍應(yīng)用字體樣式。
2.1 多顏色文本
下面的示例演示如何在同一個批注中使用多種顏色。實際開發(fā)中,這種方式常用于區(qū)分提示類型,例如用醒目的顏色標記“注意”或“警告”,再用較柔和的顏色顯示具體說明。
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
workbook.LoadFromFile("template.xlsx")
sheet = workbook.Worksheets[0]
# 創(chuàng)建不同顏色的字體
font_orange = workbook.CreateFont()
font_orange.FontName = "Arial"
font_orange.Size = 11
font_orange.KnownColor = ExcelColors.Orange
font_blue = workbook.CreateFont()
font_blue.KnownColor = ExcelColors.LightBlue
font_green = workbook.CreateFont()
font_green.KnownColor = ExcelColors.LightGreen
# 添加批注并設(shè)置富文本
cell = sheet.Range["B12"]
comment = cell.Comment
comment.RichText.Text = "注意:此數(shù)據(jù)已審核通過"
# 前4個字用綠色("注意:")
comment.RichText.SetFont(0, 4, font_green)
# 后面的字用藍色
comment.RichText.SetFont(5, 12, font_blue)
workbook.SaveToFile("rich_text_comment.xlsx", ExcelVersion.Version2007)
workbook.Dispose()
實際效果:
- "注意:"顯示為綠色(警示作用)
- "此數(shù)據(jù)已審核通過"顯示為藍色(信息性內(nèi)容)
2.2 復(fù)雜格式化示例
from spire.xls import Workbook, ExcelVersion, Color
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 創(chuàng)建多種字體樣式
font_title = workbook.CreateFont()
font_title.FontName = "Calibri"
font_title.Color = Color.get_Firebrick() # 深紅色
font_title.IsBold = True
font_title.Size = 12
font_body = workbook.CreateFont()
font_body.FontName = "Calibri"
font_body.Color = Color.get_Blue()
font_body.Size = 12
# 添加詳細批注
cell = sheet.Range["G5"]
comment = cell.Comment
comment.IsVisible = True
comment.Height = 150
comment.Width = 300
comment.RichText.Text = "產(chǎn)品說明:\nSpire.XLS是一個獨立的Excel組件,支持轉(zhuǎn)換、數(shù)據(jù)處理、圖表等功能。"
# 標題部分加粗紅色
comment.RichText.SetFont(0, 4, font_title)
# 正文部分藍色
comment.RichText.SetFont(5, 50, font_body)
workbook.SaveToFile("formatted_comment.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
適用場景:技術(shù)文檔、產(chǎn)品說明、需要分層展示的信息。
三、讀取和編輯現(xiàn)有批注
有時候需要讀取已有批注進行分析,或者批量修改。
除了創(chuàng)建批注,在實際項目中也經(jīng)常需要讀取和修改已有批注。例如,審核完成后需要提取所有批注意見生成報告,或者根據(jù)新的業(yè)務(wù)規(guī)則批量更新批注內(nèi)容。讀取批注時,可以通過單元格的 ??Comment?? 屬性獲取批注對象;編輯批注時,則可以直接修改其 ??Text?? 或 ??RichText?? 內(nèi)容。
3.1 讀取批注內(nèi)容
from spire.xls import Workbook
workbook = Workbook()
workbook.LoadFromFile("with_comments.xlsx")
sheet = workbook.Worksheets[0]
# 讀取A1單元格的批注
comment_text = sheet.Range["A1"].Comment.Text
print(f"批注內(nèi)容:{comment_text}")
# 如果批注有富文本,可以獲取RTF格式
rich_text = sheet.Range["A2"].Comment.RichText.RtfText
print(f"富文本格式:{rich_text}")
workbook.Dispose()
應(yīng)用場景:
- 提取所有批注生成審核報告
- 分析批注中的關(guān)鍵詞
- 導(dǎo)出批注到數(shù)據(jù)庫
3.2 批量讀取所有批注
from spire.xls import Workbook
workbook = Workbook()
workbook.LoadFromFile("reviewed_data.xlsx")
sheet = workbook.Worksheets[0]
# 遍歷所有有批注的單元格
comments_info = []
for row in range(1, sheet.AllocatedRange.RowCount + 1):
for col in range(1, sheet.AllocatedRange.ColumnCount + 1):
cell = sheet.Range[row, col]
if cell.Comment is not None:
info = {
'cell': f"{chr(64+col)}{row}", # 如 "A1"
'author': cell.Comment.Text.split(':')[0] if ':' in cell.Comment.Text else '',
'content': cell.Comment.Text,
'visible': cell.Comment.Visible
}
comments_info.append(info)
# 輸出所有批注信息
for info in comments_info:
print(f"單元格 {info['cell']}: {info['content']}")
workbook.Dispose()
3.3 編輯批注
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
workbook.LoadFromFile("existing_comments.xlsx")
sheet = workbook.Worksheets[0]
# 方式1:直接修改第一個批注
comment = sheet.Comments[0]
comment.Text = "批注內(nèi)容已更新 - 2024年審核"
# 方式2:修改特定單元格的批注
sheet.Range["B5"].Comment.Text = "數(shù)據(jù)已修正"
workbook.SaveToFile("updated_comments.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
四、刪除批注
批注通常用于審核、說明或臨時溝通。當文件進入最終發(fā)布、歸檔或?qū)ν夥窒黼A段時,可能需要刪除部分或全部批注,避免無關(guān)說明影響閱讀,或者防止內(nèi)部審核信息被外部用戶看到。
刪除批注可以通過批注集合 ??sheet.Comments?? 完成,也可以先定位到具體單元格,再刪除該單元格上的批注。
清理不需要的批注:
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
workbook.LoadFromFile("with_comments.xlsx")
sheet = workbook.Worksheets[0]
# 方式1:刪除特定批注
comments = sheet.Comments
if comments.Count > 0:
comments[1].Remove() # 刪除第二個批注
# 方式2:刪除所有批注
while sheet.Comments.Count > 0:
sheet.Comments[0].Remove()
workbook.SaveToFile("no_comments.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
實際場景:
- 發(fā)布最終版前清理審核批注
- 歸檔時移除臨時注釋
- 根據(jù)條件批量刪除(如只保留最近一個月的批注)
五、高級定制:讓批注更專業(yè)
基礎(chǔ)批注主要解決“能不能添加說明”的問題,而高級定制則更關(guān)注“批注是否易讀、是否符合版式要求、是否適合報表展示”。在一些正式報表、模板文件或自動生成的審核文檔中,可能需要控制批注的大小、位置、顯示狀態(tài)、背景圖片和文字方向。
這些設(shè)置可以讓批注不僅僅是簡單備注,而成為報表說明和數(shù)據(jù)審核流程的一部分。
5.1 控制批注位置和大小
默認的批注位置可能不理想,可以精確控制:
from spire.xls import Workbook, ExcelVersion, CommentVAlignType, CommentHAlignType
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 添加批注
cell = sheet.Range["G5"]
cell.Text = "查看批注"
comment = cell.Comment
comment.IsVisible = True
comment.Height = 150 # 高度
comment.Width = 300 # 寬度
# 設(shè)置絕對位置(相對于工作表左上角)
comment.Top = 20 # 距離頂部20像素
comment.Left = 40 # 距離左側(cè)40像素
# 設(shè)置文本對齊方式
comment.VAlignment = CommentVAlignType.Center # 垂直居中
comment.HAlignment = CommentHAlignType.Justified # 水平兩端對齊
comment.RichText.Text = "這是一個精確定位的批注,\n可以控制大小、位置和對齊方式。"
workbook.SaveToFile("positioned_comment.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
為什么要控制位置?
- 避免批注遮擋重要數(shù)據(jù)
- 多個批注時合理布局
- 打印時批注位置可預(yù)測
5.2 設(shè)置批注背景圖片
除了文本樣式,批注的外觀也可以進一步定制。例如,在企業(yè)模板或品牌化報表中,可以將圖片設(shè)置為批注背景,用于顯示 Logo、提示圖標或其他視覺標識。實現(xiàn)時需要先讀取圖片文件流,然后通過 ??comment.Fill.CustomPicture()?? 方法將圖片應(yīng)用到批注中。
想讓批注更有品牌感?可以加背景圖:
from spire.xls import Workbook, ExcelVersion
from System.IO import FileStream, FileMode
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 在單元格添加文本
cell = sheet.Range["C6"]
cell.Text = "公司Logo"
# 添加批注
comment = cell.AddComment()
# 加載圖片作為背景
image_stream = FileStream("logo.png", FileMode.Open)
comment.Fill.CustomPicture(image_stream, "logo.png")
comment.Visible = True
workbook.SaveToFile("comment_with_image.xlsx", ExcelVersion.Version2010)
workbook.Dispose()
應(yīng)用場景:
- 企業(yè)模板中加入公司Logo
- 用圖標區(qū)分不同類型的批注
- 品牌化的報表系統(tǒng)
5.3 批注文本旋轉(zhuǎn)
from spire.xls import Workbook, ExcelVersion, TextRotationType
workbook = Workbook()
sheet = workbook.Worksheets[0]
cell = sheet.Range["D10"]
comment = cell.AddComment()
comment.Text = "這段文字可以旋轉(zhuǎn)顯示"
comment.TextRotation = TextRotationType.LeftToRight # 從左到右
# 其他選項:
# TextRotationType.RightToLeft # 從右到左
# TextRotationType.TopToBottom # 從上到下
comment.Visible = True
workbook.SaveToFile("rotated_comment.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
適用場景:特殊排版需求、多語言文檔、豎排文字。
5.4 顯示/隱藏批注
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
workbook.LoadFromFile("with_comments.xlsx")
sheet = workbook.Worksheets[0]
# 顯示所有批注
for comment in sheet.Comments:
comment.Visible = True
# 或者只顯示特定的批注
sheet.Range["A1"].Comment.Visible = True
sheet.Range["B2"].Comment.Visible = False # 隱藏這個
workbook.SaveToFile("visibility_control.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
實際應(yīng)用:
- 審核模式:顯示所有批注
- 最終版:隱藏批注(但不刪除,保留歷史記錄)
- 打印前:隱藏批注避免干擾
六、實戰(zhàn)案例:自動化審核系統(tǒng)
前面的示例分別介紹了批注的添加、讀取、編輯、刪除和樣式設(shè)置。接下來通過一個完整案例,把這些操作組合起來,模擬一個簡單的數(shù)據(jù)審核流程:程序從 CSV 文件讀取銷售數(shù)據(jù),將數(shù)據(jù)寫入 Excel,并根據(jù)業(yè)務(wù)規(guī)則自動識別異常值,為異常單元格添加批注和背景色。
這個案例更接近真實項目中的使用方式,適合用于報表審核、數(shù)據(jù)質(zhì)量檢查、異常數(shù)據(jù)標記等場景。
最后來個完整的例子:從CSV導(dǎo)入數(shù)據(jù),自動標記異常值并添加批注。
from spire.xls import Workbook, ExcelVersion, Color
import csv
def create_review_report(csv_file: str, output_file: str):
"""
從CSV創(chuàng)建Excel報表,自動添加審核批注
"""
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "銷售數(shù)據(jù)審核"
# 創(chuàng)建字體樣式
font_warning = workbook.CreateFont()
font_warning.Color = Color.get_Red()
font_warning.IsBold = True
font_info = workbook.CreateFont()
font_info.Color = Color.get_Blue()
# 讀取CSV數(shù)據(jù)
with open(csv_file, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
headers = next(reader)
# 寫入表頭
for col, header in enumerate(headers, 1):
sheet.Range[1, col].Value = header
# 寫入數(shù)據(jù)并檢查異常
row_num = 2
for row in reader:
for col, value in enumerate(row, 1):
sheet.Range[row_num, col].Value = value
# 假設(shè)第3列是銷售額,檢查異常值
try:
sales = float(row[2])
# 銷售額超過10000,添加警告批注
if sales > 10000:
cell = sheet.Range[row_num, 3]
comment = cell.AddComment()
comment.Text = f"警告:銷售額 {sales:.2f} 超出正常范圍\n請核實數(shù)據(jù)準確性"
comment.Width = 250
comment.Visible = True
# 設(shè)置警告樣式
comment.RichText.SetFont(0, 2, font_warning)
comment.RichText.SetFont(3, len(comment.Text), font_info)
# 高亮單元格
cell.Style.Color = Color.get_LightYellow()
except (ValueError, IndexError):
pass
row_num += 1
# 自動調(diào)整列寬
sheet.AllocatedRange.AutoFitColumns()
# 添加說明批注
title_cell = sheet.Range["A1"]
title_comment = title_cell.AddComment()
title_comment.Text = "審核說明:\n- 紅色批注:數(shù)據(jù)異常需核實\n- 黃色背景:已標記的高值\n- 請審核后移除此批注"
title_comment.Width = 300
title_comment.Height = 150
title_comment.Visible = True
workbook.SaveToFile(output_file, ExcelVersion.Version2013)
workbook.Dispose()
print(f"審核報表已生成:{output_file}")
# 使用示例
create_review_report("sales_data.csv", "sales_review.xlsx")
這個例子展示了:
- 自動檢測:根據(jù)業(yè)務(wù)規(guī)則識別異常
- 智能批注:不同情況不同提示
- 視覺提示:顏色+批注雙重標記
- 可追溯:保留審核痕跡
七、一些實用建議
1. 什么時候用批注,什么時候不用?
適合用批注:
- 臨時性的審核意見
- 單元格級別的說明
- 需要隱藏/顯示的注釋
不適合用批注:
- 長篇大論的說明(用單獨的Sheet)
- 永久性的重要信息(放在單元格或頁眉頁腳)
- 結(jié)構(gòu)化數(shù)據(jù)(用額外的列)
2. 批注的性能考慮
- 大量批注(幾百個以上)會影響文件打開速度
- 富文本批注比普通文本占用更多空間
- 圖片背景的批注會顯著增加文件大小
建議:
- 定期清理不需要的批注
- 發(fā)布最終版前移除審核批注
- 大量說明用單獨的工作表
3. 批注的最佳實踐
? 要做:
- 批注內(nèi)容簡潔明了
- 加上作者和時間戳
- 重要的批注設(shè)為可見
- 定期整理和清理
? 不要做:
- 用批注存儲重要數(shù)據(jù)
- 批注內(nèi)容過長(超過100字考慮其他方式)
- 忘記移除臨時批注
- 批注中包含敏感信息(批注容易被忽略而泄露)
4. 批注 vs 其他方案對比
| 需求 | 推薦方案 | 原因 |
|---|---|---|
| 單元格說明 | 批注 | 不占用單元格空間 |
| 長篇文檔 | 單獨Sheet | 更易閱讀和管理 |
| 數(shù)據(jù)驗證提示 | 數(shù)據(jù)驗證功能 | 輸入時即時提示 |
| 公式說明 | 命名范圍+說明 | 更結(jié)構(gòu)化 |
| 版本歷史 | 單獨的歷史Sheet | 便于追蹤 |
八、常見問題
Q1: 如何批量導(dǎo)出所有批注?
A: 遍歷所有單元格,提取批注內(nèi)容保存到文本文件或數(shù)據(jù)庫:
comments_export = []
for row in range(1, max_row + 1):
for col in range(1, max_col + 1):
cell = sheet.Range[row, col]
if cell.Comment:
comments_export.append({
'location': f"{chr(64+col)}{row}",
'text': cell.Comment.Text
})
# 保存到CSV或數(shù)據(jù)庫
Q2: 批注會影響打印嗎?
A: 默認情況下,批注不會打印出來。如果需要打印批注:
- 在Excel中:頁面布局 → 打印標題 → 批注設(shè)置為"工作表末尾"
- 用代碼:需要設(shè)置頁面設(shè)置(具體API取決于庫的版本)
Q3: 能保護批注不被修改嗎?
A: 可以保護工作表,但這樣也會鎖定單元格。更好的做法是:
- 完成審核后移除批注
- 或?qū)⑴?nèi)容復(fù)制到受保護的Sheet
總結(jié)
批注是個被低估的Excel功能。用得好,能大幅提升協(xié)作效率和數(shù)據(jù)質(zhì)量。通過本文的例子,你應(yīng)該掌握了:
- 基礎(chǔ)操作:添加、讀取、編輯、刪除批注
- 富文本格式化:多顏色、多字體、分層展示
- 高級定制:位置控制、背景圖片、文本旋轉(zhuǎn)
- 自動化應(yīng)用:批量處理、智能標記、審核系統(tǒng)
- 最佳實踐:何時用、怎么用、注意事項
核心原則:批注是用來輔助理解的,不是用來存儲數(shù)據(jù)的。保持批注簡潔、相關(guān)、及時清理,才能真正發(fā)揮它的價值。
以上就是Python代碼實現(xiàn)添加、刪除和修改Excel批注的詳細內(nèi)容,更多關(guān)于Python操作Excel批注的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python如何實現(xiàn)簡單調(diào)用c++庫
這篇文章主要為大家詳細介紹了python如何實現(xiàn)簡單調(diào)用c++庫,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-03-03
python 高效去重復(fù) 支持GB級別大文件的示例代碼
今天小編就為大家分享一篇python 高效去重復(fù) 支持GB級別大文件的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
將Python程序部署到Ubuntu系統(tǒng)的完整流程
本文介紹了將Python程序部署到Ubuntu系統(tǒng)的完整流程,包括前期準備、上傳程序、配置運行環(huán)境以及后臺持久運行,還提供了解決常見問題的方法,推薦使用FileZilla上傳程序及systemd實現(xiàn)開機自啟,需要的朋友可以參考下2026-04-04

