хорошо, поэтому я пытаюсь получить цвет шрифта ячейки, так как программе нужно делать разные вещи, зависящие от цвета шрифта в ячейке, поэтому я сделал тестовый файл
и я попытался получить к нему доступ так:
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'
Я видел, как люди говорили, что вы задаете цвет с помощью объекта рисования, поэтому я попытался изменить последние две строки на:
Color color =(System.Drawing.Color)font.Color;
Console.WriteLine(" "+r.Value+" " + color.ToArgb());
но это тоже не сработало
Can not convert type 'double' to 'System.Drawing.Color'
поэтому я подумал, что посмотрю, что это за двойник, затем установим шрифт на известное значение 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
Я не могу использовать сторонние библиотеки из-за правил, установленных владельцем проекта.
Итак, как мне получить фактическое значение цвета?





Используйте свойство FontRange, а не его Style. Затем используйте класс ColorTranslator для преобразования двойного 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());
}
ООО да! спасибо, что попадает во что-то, с чем я могу работать.