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

如何使用EPPlus获取Excel单元格批注的作者真实名称?

解决EPPlus获取Excel批注作者返回tc=GUID的问题

原因说明

你看到的tc={GUID}是Excel的线程缓存ID(Thread Cache ID),并非Active Directory的用户GUID,所以用AD查询自然无效。这种情况通常出现在使用Office 365/2019及以上版本的企业版Excel时,当开启了隐私保护或协作会话功能,Excel会将批注的真实作者名替换为临时的tc格式标识符,避免泄露个人信息。EPPlus只是直接读取OOXML文件中存储的作者字段,因此返回的是这个替换后的字符串。

解决方法

1. 直接读取Excel底层XML提取真实作者

如果文件底层仍保留了真实作者信息(部分场景下Excel只是隐藏了显示,并未彻底删除),可以通过EPPlus访问批注的原始XML来获取:

using System.Xml;
using OfficeOpenXml;

// 注意:需根据使用场景设置EPPlus许可
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 商用场景请改为LicenseContext.Commercial

using (var package = new ExcelPackage(new FileInfo(pathToExcelFile)))
{
    var worksheet = package.Workbook.Worksheets[0];
    var commentsXml = worksheet.CommentsXml;
    if (commentsXml == null)
    {
        Console.WriteLine("该工作表无批注");
        return;
    }

    var nsManager = new XmlNamespaceManager(commentsXml.NameTable);
    var ns = commentsXml.DocumentElement.NamespaceURI;
    nsManager.AddNamespace("d", ns);

    // 获取所有作者列表
    var authorNodes = commentsXml.SelectNodes("//d:author", nsManager);
    if (authorNodes == null || authorNodes.Count == 0)
    {
        Console.WriteLine("未找到作者信息");
        return;
    }

    // 遍历每个批注,匹配对应作者
    var commentNodes = commentsXml.SelectNodes("//d:comment", nsManager);
    foreach (XmlNode commentNode in commentNodes)
    {
        var refCell = commentNode.Attributes["ref"]?.Value;
        var authorIdStr = commentNode.Attributes["authorId"]?.Value;
        
        if (int.TryParse(authorIdStr, out int authorId) && authorId < authorNodes.Count)
        {
            var realAuthorName = authorNodes[authorId].InnerText;
            Console.WriteLine($"单元格{refCell}的批注作者:{realAuthorName}");
        }
    }
}

2. 调整Excel保存设置

如果是你自己生成或有权修改的文件,可以关闭Excel的隐私保护设置,让其保存真实作者名:

  • 打开Excel文件,点击「文件」→「另存为」→「工具」→「常规选项」,取消勾选「删除文件属性和个人信息」
  • 或者进入「文件」→「选项」→「信任中心」→「信任中心设置」→「隐私选项」,关闭「保存时从文件属性中删除个人信息」

3. 注意事项

如果Excel已经彻底删除了真实作者信息(仅保留tc=GUID),则无法通过任何方式恢复真实名称——因为tc标识符只是Excel会话的临时ID,不关联任何全局用户系统(包括AD)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:06:04