Изменение backcolor ячейки Excel с помощью шестнадцатеричных результатов в Excel, отображающих совершенно другой цвет в электронной таблице

поэтому я устанавливаю внутренний цвет ячейки Excel на определенное значение, как показано ниже:

worksheet.Cells[1, 1].Interior.Color = 0xF1DCDB;

однако, когда я открываю электронную таблицу в Excel, я вижу, что цвет, который вышел, совершенно другой (в приведенном выше случае цвет в результирующей электронной таблице-0xDCDCEF). Я попробовал несколько разных цветов, и он всегда меняет его, и я не вижу шаблона.

есть ли какая-либо причина для этого? Я даже попытался установить цвет, написав цвет.FromArgb(241, 220, 219).ToArgb (), и произошло то же самое.

7 ответов


Я, наконец, понял это, после многих тестов, и это было что-то очень простое. По-видимому, библиотека взаимодействия Excel имеет ошибку и меняет красные и синие значения, поэтому вместо того, чтобы передавать ей шестнадцатеричное RGB, мне нужно передать BGR, и внезапно цвета работают нормально. Я поражен, что эта ошибка не документирована нигде в интернете.

поэтому, если кто-то еще когда-либо сталкивается с этой проблемой, просто передайте значения Excel в значениях BGR. (Или при использовании цвета.FromArgb (), pass in Цвет.FromArgb (B, G, R))


вам нужно преобразовать цвет из hex в цветовую систему Excel следующим образом:

ColorConverter cc = new ColorConverter();
worksheet.Cells[1, 1].Interior.Color = ColorTranslator.ToOle((Color)cc.ConvertFromString("#F1DCDB"));

это не ошибка, так как цветовая система Excel всегда была такой. Это еще одна вещь, которая делает c# - Excel interop болью.


обратите внимание, что это не ошибка!Красный начинается с нижнего бита, а зеленый-в середине, а синий берет самые высокие биты

B G R
00000000 00000000 00000000

расчет: (65536 * синий) + (256 * зеленый) + (красный)

спасибо.


попробовать worksheet.cells(1,1).interior.color = rgb(241, 220, 219).

редактировать Я тупой, просто заметил, что вы не используете VBA 8). Это немного длинный отрезок, но можете ли вы попробовать отправить его как десятичный? Чего бы это ни стоило ...интерьер.color = &HF1DCDB работает в VBA так же, как и = 15850715.


Это справочная информация, которая может объяснить ответы.

Если с HTML вы укажете цвет #FF9900 вы получите то, что Excel называет светло-оранжевым. Если вы укажете цвет #003366, вы получите то, что Excel называет Dark teal. Но если вы хотите светло-оранжевый или темный чирок с vba, вы должны указать &H0099FF и &H663300.

то есть, хотя функция VBA РГБ(&ГРР, &ХГГ, &ГБД) число он генерирует &Hbbggrr потому что Excel отображать двигателя хочет.

Я бы предположил, что человек, который закодировал взаимодействие Excel, не знал, что Excel использует нестандартные номера для указания цветов.


на цвета RGB в одиночку можно разобрать из HTML hex строку:

Color colour = ColorTranslator.FromHtml("#E7EFF2");

Если у вас есть отдельное Альфа-значение, вы можете применить это (docs):

Color colour = ColorTranslator.FromHtml("#E7EFF2");
Color transparent = Color.FromArgb(128, colour);

просто хотел опубликовать свой код. Поскольку для меня не было решения copy&paste. На основе кода Сандеша:

private void ColorMe(Color thisColor){
rng = xlApp.ActiveCell;
Color mycolour = ColorTranslator.FromHtml("#" + thisColor.Name.Substring(2, 6));
rng.Interior.Color = Color.FromArgb(mycolour.R, mycolour.G, mycolour.B);
}