我正在编写一个生成一些电子表格ML(XML)的工具,为我的用户创建一个Excel电子表格。
我已经定义了一个样式如下:
<Style ss:ID="GreenText"> <Font ss:FontName="Arial" ss:Size="9" ss:Color="#8CBE50" /> </Style>
这在某种程度上有效,但是当我在Excel中打开它时,为文本渲染的颜色不是我指定的颜色 - 它是一个更亮的版本。我可以为单元格边框使用相同的颜色参考,并正确渲染颜色。
任何人都可以解释为什么文字颜色没有正确呈现?
谢谢!
答案 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更改调色板。