是否有 method/way 来检索单元格值的文本颜色?

Is there a method/way to retrieve text color of a cell value?

我需要使用 C# 打开 XML 从 Excel 文件中检索数据,并将它们显示在 dataGridView 中。

我检索了我需要的所有值,但我还必须检索这些值的文本颜色才能显示它们在文件中的原样。

我在不同的线程中查看了如何更改文本的颜色,并尝试使用相同的方法,但我找不到一种方法来拥有我的数据的所有颜色。

我试图检索单元格的颜色,有时我有 Rgb 值,但大多数情况下,我只有一个颜色索引,或者什么都没有。

我试图查看 Excel 文件的 XML 文件,但无法找到 link 一切的方法

private string GetTextColor(Cell cell, Stylesheet stylesheet)
{
        CellFormats cellFormats = stylesheet.CellFormats;
        DocumentFormat.OpenXml.Spreadsheet.CellFormat cellFormat = cellFormats.Descendants<DocumentFormat.OpenXml.Spreadsheet.CellFormat>().ElementAt(Convert.ToInt32(cell.StyleIndex.Value));
        var textColor = stylesheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Color>().ElementAt(Convert.ToInt32(cellFormat.FillId.Value));
        return textColor.Rgb; //Null most of the case
}

不知道有没有别的方法可以获取文字的颜色,试了很多方法都找不到...

提前感谢您的宝贵时间!

这在过去对我有用:

int colorNumber = System.Convert.ToInt32(((Range) cell.Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);

我终于找到办法了:

我发现可以通过两种方式找到颜色:直接从 RGB 十六进制代码中找到,或者在 ColorScheme 中,具体取决于所使用的颜色是否在主题中定义。

首先,我像这样遍历单元格的 TableCellProperties :

foreach(D.TableCellProperties cPr in _cell.Elements<D.TableCellProperties>())

然后我也遍历 SolidFill :

foreach(D.SolidFill sldFill in cPr.Elements<D.SolidFill>())

(其中 D 定义为 using D = DocumentFormat.OpenXml.Drawing;

在此之后,我能够检测 SchemeColor 或 RgbColorHexModel 是否不为空。

第一种情况: 如果值 sldFill.ShemeColor 不为空,我将检索文件的配色方案中包含的所有颜色:

presentationDocument.PresentationPart.ThemePart.Theme.ThemeElements.ColorScheme;

并且,我将反复进行直到找到相同的颜色名称。在此之后,我可以使用此参数检索 RGB 值:

//colorName represent the color found in the ColorScheme
colorName.Elements<D.RgbColorModelHex>()

第二种情况: 如果值 sldFill.RgbColorModelHex 不为空,我将像这样检索十六进制代码:

color = sldFill.RgbColorModelHex.Val;