Визуализация цветовой таблицы (цвет) в электронной таблице ML - PullRequest
1 голос
/ 07 октября 2009

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

Я определил стиль следующим образом:

<Style ss:ID="GreenText">
  <Font ss:FontName="Arial" ss:Size="9" ss:Color="#8CBE50" />
</Style>

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

Может кто-нибудь пролить свет на то, почему цвет текста отображается неправильно?

Спасибо!

Ответы [ 2 ]

1 голос
/ 07 октября 2009

Дэвид прав, что 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);
0 голосов
/ 07 октября 2009

Excel ограничен палитрой из 56 цветов. Он хранит только индексы цвета, а не фактические значения RGB. Они допускают использование пользовательских цветов в палитре, но Я не знаю, как изменить их программно .

Edit:
Я не использовал офисные документы xml, но это может помочь (тег indexedColors для определения палитры):
http://openxmldeveloper.org/forums/thread/309.aspx

Также есть свойство Workbook.Colors для изменения палитры из VBA.

...