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

如何在C#中获取Excel单元格的字体颜色

解决Office Interop Excel获取单元格字体实际颜色的问题

问题根源

你之前的代码错误地使用了r.Style.Font来获取字体颜色——Style对应的是单元格应用的样式模板,而非单元格直接设置的实际格式。如果单元格是手动设置的字体颜色(未通过样式应用),Style.Font只会返回样式的默认颜色,这就是你得到全0和ColorIndex=1的原因。

正确实现方案

直接使用单元格自身的Font属性,而非Style下的Font,再通过ColorTranslator将OLE_COLOR类型的值转换为System.Drawing.Color:

Range thrange = ws.UsedRange.Columns["A:A", Type.Missing].Rows;
foreach (Range r in thrange)
{
    // 直接获取单元格的Font对象,而非Style中的Font
    Font font = r.Font;
    // 将OLE_COLOR类型的double值转换为System.Drawing.Color
    System.Drawing.Color color = System.Drawing.ColorTranslator.FromOle((int)font.Color);
    // 输出单元格值和十六进制颜色(如#FF0000对应红色)
    Console.WriteLine($"  {r.Value}  #{color.R:X2}{color.G:X2}{color.B:X2}");
}

关键说明

  • r.Font:直接指向单元格实际应用的字体格式,不管是通过样式还是手动设置,都能获取真实的颜色值。
  • font.Color返回的是OLE_COLOR类型的double值,需要先转换为int,再用ColorTranslator.FromOle转换为GDI+的Color对象,才能正确解析RGB分量。
  • 转换后可通过color.R、color.G、color.B获取RGB数值,或格式化为标准十六进制颜色字符串。

预期输出

运行代码后,对应测试单元格的输出会是:

cyan  #00FFFF
  pink  #FFC0CB
  blue  #0000FF
  red  #FF0000
  orange  #FFA500
  purple  #800080

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:25:18