You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Excel 365普通批注、线程批注内容并转换为纯文本字符串

Excel 365两类批注批量提取为普通字符串的实用方案

Excel 365的批注分为传统批注和线程批注两种,两类对应的接口逻辑不同,以下是两种不同场景的便捷处理方案:

方案1:VBA 批量提取(适合高频/批量处理场景)

  • 按下Alt + F11打开VBA编辑器,右键点击当前工作簿名称→插入→模块
  • 将以下代码粘贴到模块编辑区:
Sub 提取任意类型批注为字符串()
    Dim rng As Range
    For Each rng In Selection
        Dim res As String
        res = ""
        ' 判断是否存在传统批注
        If Not rng.Comment Is Nothing Then
            res = rng.Comment.Text
        ' 判断是否存在线程批注
        ElseIf Not rng.CommentThreaded Is Nothing Then
            res = rng.CommentThreaded.Text
        End If
        ' 结果输出到选中单元格右侧列,可自行修改输出位置
        rng.Offset(0, 1).Value = res
    Next
End Sub

如果需要提取线程批注下的全部回复内容,可将线程批注判断分支替换为以下代码片段:

Dim cmt As CommentThreaded, rep As CommentThreaded
Set cmt = rng.CommentThreaded
res = cmt.Author.Name & ":" & cmt.Text & vbCrLf
For Each rep In cmt.Replies
    res = res & rep.Author.Name & ":" & rep.Text & vbCrLf
Next
  • 回到Excel界面,选中需要提取批注的单元格区域,按下Alt + F8,选择宏名「提取任意类型批注为字符串」点击运行即可。

方案2:Power Query 无代码提取(适合不想启用宏的场景)

  • 选中包含批注的数据源区域,按下Ctrl + T转换为超级表
  • 点击顶部菜单栏「数据」→「从表格/区域」,进入Power Query编辑器
  • 点击顶部「添加列」→「自定义列」,输入自定义列公式:
= try if Value.Is(Value.Type([目标列名]), Type.RecordType) then [目标列名][Comment]?[Text] ?? [目标列名][CommentThreaded]?[Text] ?? "" else "" otherwise ""

注意将公式中的目标列名替换为你实际需要提取批注的列的名称

  • 点击确定后,新列会自动匹配两类批注输出普通字符串,最后点击「关闭并上载」即可将结果导回Excel工作表。

内容的提问来源于stack exchange,提问作者ascripter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:03