EPPlus是目前唯一能稳定提取XLSX批注文本、作者及位置的主流库;需用v6.2+或v5.8.7,启用LicenseContext,从worksheet.Drawings中遍历ExcelComment对象,通过Address匹配单元格,Text读纯文本,Author取作者,Top/Left为像素坐标。用 EPPlus 读取 XLSX 批注最稳直接说结论:别碰 Microsoft.Office.Interop.Excel,它依赖 Office 安装、线程不安全、服务器跑不起来;NPOI 对 XLSX 批注支持极弱(v2.5+ 虽加了 Comment 类但实际读不到内容);EPPlus 是目前唯一能稳定提取批注文本、作者、位置的主流库。实操建议:用 EPPlus v6.2+(.NET 5+)或 v5.8.7(.NET Framework 4.6.1+),老版本有批注解析空指针问题加载时必须启用富文本支持:ExcelPackage.LicenseContext = LicenseContext.NonCommercial;(开源版)或填商业授权,否则部分批注字段为 null批注不是“单元格属性”,而是独立对象,需通过 worksheet.Drawings 查找,不是 cell.Commentworksheet.Drawings 里找批注对象很多人卡在这步:以为 cell.Comment.Text 就是批注内容,其实 XLSX 的批注是 Drawing 对象(ExcelComment),藏在 Drawings 集合里,和单元格是松耦合关系。常见错误现象:cell.Comment 始终为 null,或读出来是空字符串——那是因为你没从 Drawings 里匹配。实操建议:遍历 worksheet.Drawings,过滤出 ExcelComment 类型:var comments = worksheet.Drawings.OfType<ExcelComment>();每个 ExcelComment 有 Address 属性(如 "A1"),用它反查对应单元格:worksheet.Cells[comment.Address]comment.Text 是纯文本,comment.RichText 可读格式化内容(含字体/颜色),但注意:部分 Excel 导出的 XLSX 会把换行存成 ,需手动替换批注作者、时间、位置怎么对应上XLSX 批注元数据分散在不同地方:作者名在 comment.Author,但可能为空(尤其从 WPS 或网页导出);创建时间不在 ExcelComment 上,得查 comment.Workbook.PackagingProperties.Created(整个文件时间,非单条批注);位置靠 comment.Top/comment.Left,但这是像素偏移,对齐逻辑得自己算。 Trenz AI驱动的社交电商营销平台,专为TikTok Shop设计

更多推荐