使用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示例给出或指导作为答案是不现实的。 试试用多色文字的单元格