Дэвид прав, что Excel 2003 и предыдущие версии Excel ограничены 56-цветовой палитрой.
В Excel 2007 добавлена поддержка 24-битных цветов, а также цветов темы. Excel 2007 может писать книги xls, которые содержат эту дополнительную информацию о цвете и которую может прочитать Excel 2003, но Excel 2003 по-прежнему будет ограничен 56-цветовой палитрой. Excel 2007 может загружать эти книги и отображать точные цвета.
SpreadsheetGear for .NET поддерживает новые 24-битные цвета и цвета темы, а также индексированные цвета старой палитры, как в Excel 2007. Вы можете использовать SpreadsheetGear, чтобы создать рабочую книгу с 24-битными цветами, которая будет правильно отображаться в Excel 2007, или изменить палитру, и они будут правильно отображаться в Excel 2007 и Excel 2003. Ниже приведен пример обоих.
Вы можете скачать бесплатную пробную версию здесь и попробовать сами.
Отказ от ответственности: я владею SpreadsheetGear LLC
Вот пример кода:
// Create a new empty workbook with one worksheet.
IWorkbook workbook = Factory.GetWorkbook();
// Get the worksheet and change it's name to "Person".
IWorksheet worksheet = workbook.Worksheets[0];
worksheet.Name = "Colors";
// Put "Hello World!" into A1.
IRange a1 = worksheet.Cells["A1"];
a1.Value = "Hello World!";
a1.Font.Color = System.Drawing.Color.FromArgb(0x8C, 0xBE, 0x50);
// Save the workbook as xls (Excel 97-2003 / Biff8) with default palette.
//
// This workbook will display the exact color in Excel 2007 and
// SpreadsheetGear 2009, but will only display the closest available
// palette indexed color in Excel 2003.
workbook.SaveAs(@"C:\tmp\GreenDefaultPalette.xls", FileFormat.Excel8);
// Save as xlsx / Open XML which will also display the exact color.
workbook.SaveAs(@"C:\tmp\GreenDefaultPalette.xlsx", FileFormat.OpenXMLWorkbook);
// Now, modify the palette and save. This workbook will display the exact
// color in Excel 2003 as well as in SpreadsheetGear 2009 and Excel 2007.
//
// Note that modifying the palette will change the color of any cells which
// already reference this palette indexed color - so be careful if you are
// modifying pre-existing workbooks.
workbook.Colors[0] = a1.Font.Color;
workbook.SaveAs(@"C:\tmp\GreenModifiedPalette.xls", FileFormat.Excel8);