是否有 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;
我需要使用 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;