使用C#和Open XML SDK 2.5,你如何将单元格的值设置为单个字符的颜色

我想自动从我们的氨基酸1号字母代码从他们目前输出的C#。

电子表格输出正确,我有这样一个列:

AB 1 KJAGLKJGKASLJG 2 FLFSFHDSHDSHHF 3 KJSDALKDJKLFJK 4 KLFDJSHASDFFSD 

每个不同的angular色将被分配自己的颜色。 例如,K是红色,L是黄色,D是橙色。 这必须通过Open XML SDK完成,而不是Excel COM编程或VBA脚本。

目前,这是如何输出单元格,但他们使用默认的样式表。

 string columnName = AlphabetLetterRollOver((int) columnIndex); string cellRef = columnName + (rowIndex + 1); Cell cell1 = new Cell {CellReference = cellRef, StyleIndex = 1U}; cell1.DataType = CellValues.String; CellValue cellValue1 = new CellValue(); cellValue1.Text = columnValue; cell1.Append(cellValue1); row1.Append(cell1); 

我尝试了下面的代码作为testing用例来实现我想要的,但是它不工作; 它会抛出一个exception:

 RunProperties runProperties = new RunProperties(); FontSize fontSize = new FontSize() {Val = 10D}; Color color = new Color() {Rgb = "FF000000"}; RunFont runFont = new RunFont() {Val = "Consolas"}; FontFamily fontFamily = new FontFamily() {Val = 3}; runProperties.Append(fontSize); runProperties.Append(color); runProperties.Append(runFont); runProperties.Append(fontFamily); Run run = new Run(); Text text = new Text(); text.Text = "A"; run.Append(runProperties); run.Append(text); cell1.Append(run); row1.Append(cell1); 

抛出的这个exception如下所示:

 Exception: System.InvalidOperatioonException Message: Cannot insert the OpenXmlElement "newChild" because it is part of a tree. Source: DocumentFormat.OpenXml StrackTrace: at DocumentFormat.OpenXml.OpenXmlCompositeElement.AppendChild[T](T newChild) at DocumentFormat.OpenXml.OpenXmlElement.Append(OpenXmlElement[] newChildren) 

任何想法将不胜感激,谢谢!

你需要做的是创buildshared strings与每个字母设置为您需要的颜色。 然后将其中的许多追加到您想要的单元格中。

编辑 –

下载OpenXMLSDKToolV25.msi

现在这里有个诀窍,OpenXML生产力工具就是你需要的。 它允许您浏览现有的Excel文件并将其分解为CODES: watch

现在你需要做的是手动创build一个Excel工作表,你想要什么(在你的情况下有多个文字)然后用生产力工具打开这个Excel文件,并了解CODE。 请注意,您将需要了解电子表格文件结构以了解此代码[请参阅此] 。现在编写代码以满足您的要求使用生产力工具代码

注意 – 一旦你用生产力工具分析虚拟电子表格,你就会明白为什么用CODE示例给出或指导作为答案是不现实的。 试试用多色文字的单元格