繁体   English   中英

如何获取c#中一个Excel单元格的字体颜色

[英]How to Get the font color of an Excel Cell in c#

好的,所以我正在尝试获取单元格的字体颜色,因为程序需要根据单元格中的字体颜色做不同的事情,所以我制作了一个测试文件

单元格在 excel 中的外观

我试着像这样访问它:

Range thrange = ws.UsedRange.Columns["A:A", Type.Missing].Rows;
foreach (Range r in thrange)
{
   Style sy = r.Style;
   Font font = sy.Font;
   ColorFormat color = (ColorFormat)font.Color;
   Console.WriteLine("  "+r.Value+"  " + color.RGB);
}

我得到Can not convert type 'double' to 'Microsoft.Office.Interop.Excel.ColorFormat'

我看到有人说你用绘图 object 设置颜色所以我尝试将最后两行更改为:

Color color =(System.Drawing.Color)font.Color;
Console.WriteLine("  "+r.Value+"  " + color.ToArgb());

但这也不起作用Can not convert type 'double' to 'System.Drawing.Color'

所以我想我会看看这个 double 是什么,然后将字体设置为已知的 rgb 值并计算出如何将我得到的数字转换回那个数字。 但这也没有用。 作为 while Console.WriteLine(" "+r.Value+" "+r.style.font.color); 没有抛出错误它仍然没有给我任何有用的东西:

 cyan 0
 pink 0
 blue 0
 red 0
 orange 0
 purple 0

我想也许r.style.font.colorindex但这只是给了我一个 1 而不是 0 我正在寻找类似的东西

 blue 0000ff
 red ff0000

由于项目所有者制定的规则,我不能使用第三方库。

那么如何得到实际的颜色值呢?

使用RangeFont属性而不是其Style的属性。 然后使用ColorTranslator class 将 double value从 Office 转换为 .net Color

foreach (Microsoft.Office.Interop.Excel.Range r in thrange)
{
    // Get Color from Font from Range directly
    int oleColor = Convert.ToInt32(r.Font.Color);
   
    // Convert to C# Color type
    System.Drawing.Color c = System.Drawing.ColorTranslator.FromOle(oleColor);

    // Output
    Console.WriteLine(r.Value + " " + c.ToString());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM