So I am setting an Excel cell's Interior Color to a certain value, like below:
worksheet.Cells[1, 1].Interior.Color = 0xF1DCDB;
However, when I then open up the spreadsheet in Excel, I see that the color that came out is completely different (in the above case, the color in the resulting spreadsheet is 0xDCDCEF). I tried a few different colors and it always changes it, and I don't see a pattern.
Is there any reason for this? I even tried setting the color by writing Color.FromArgb(241, 220, 219).ToArgb(), and the same thing happened.
I finally figured it out, after lots of tests, and it was something really simple. Apparently, Excel's Interop library has a bug and is reversing the Red and Blue values, so instead of passing it a hex of RGB, I need to pass BGR, and suddenly the colors work just fine. I'm amazed that this bug isn't documented anywhere else on the internet.
So if anyone else ever runs into this problem, simply pass Excel values in BGR values. (Or if using Color.FromArgb(), pass in Color.FromArgb(B, G, R))
You need to convert the color from hex to Excel's color system as follows:
ColorConverter cc = new ColorConverter();
worksheet.Cells[1, 1].Interior.Color = ColorTranslator.ToOle((Color)cc.ConvertFromString("#F1DCDB"));
It's not really a bug, since Excel's color system has always been this way. It's just one more thing that makes C# - Excel interop a pain.
Please note that this is not a bug!Red starts from the lower bit and Green is in the middle and Blue takes the highest bits
B G R
00000000 00000000 00000000
The calculation is: (65536 * Blue) + (256 * Green) + (Red)
Thank you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With