电子表格ML文本颜色(颜色)渲染

时间:2009-10-06 22:11:20

标签: excel spreadsheetml

我正在编写一个生成一些电子表格ML(XML)的工具,为我的用户创建一个Excel电子表格。

我已经定义了一个样式如下:

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

这在某种程度上有效,但是当我在Excel中打开它时,为文本渲染的颜色不是我指定的颜色 - 它是一个更亮的版本。我可以为单元格边框使用相同的颜色参考,并正确渲染颜色。

任何人都可以解释为什么文字颜色没有正确呈现?

谢谢!

2 个答案:

答案 0 :(得分:1)

David认为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中正确显示。以下是两者的示例。

您可以下载免费试用版here并亲自试用。

免责声明:我拥有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);

答案 1 :(得分:0)

Excel仅限于56种颜色的调色板。它只存储颜色索引而不是实际的RGB值。他们确实允许调色板中的自定义颜色,但我不知道如何以编程方式更改它们

修改:
我没有使用office xml文档,但这可能会有所帮助(indexedColors标记用于定义调色板):
http://openxmldeveloper.org/forums/thread/309.aspx

还有一个Workbook.Colors属性,用于从VBA更改调色板。