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

3

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

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);
}

我遇到了一个问题:

无法将类型“double”转换为“Microsoft.Office.Interop.Excel.ColorFormat”

我看到有人说要使用绘图对象来设置颜色,所以我尝试将最后两行改为:

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

但是这也没用,错误消息是:无法将类型“double”转换为“System.Drawing.Color”

所以我想查看一下这个double是什么,然后把字体设置为已知的RGB值,并计算如何将我得到的数字转换为该值。 但是这也没有起作用,因为虽然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

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

那么我如何获取实际的颜色值呢?

1个回答

2

使用Range的Font属性而不是其Style属性。然后使用ColorTranslator类将来自Office的双精度value转换为.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());
}

哦,是的!谢谢,这让我有了可以处理的东西。 - Kit Ramos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接