我想从当前输出的c#中自动对我的氨基酸1个字母代码进行着色。
电子表格输出正确,我有一个列,例如:
A B
1 KJAGLKJGKASLJG
2 FLFSFHDSHDSHHF
3 KJSDALKDJKLFJK
4 KLFDJSHASDFFSD
每个不同的角色都会被赋予自己的颜色。例如,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);
我尝试使用以下代码作为测试用例来实现我想要的,但它没有用;它引发了一个例外:
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: 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)
任何想法都将不胜感激,谢谢!
答案 0 :(得分:1)
您需要做的是创建shared strings
,并将每个字母设置为您需要的颜色。然后将尽可能多的人追加到你想要的细胞中。
编辑 -
现在就是诀窍,OpenXML生产力工具就是你需要的工具。它允许您浏览现有的Excel文件并将其分解为CODES:watch
现在您需要做的是手动创建一个Excel表格[在您的情况下具有多颜色文本]然后使用生产力工具打开此Excel文件并理解CODE。请注意,您需要了解电子表格文件结构才能理解此代码[请参阅this] ..现在使用生产力工具代码编写代码以满足您的要求
注意 - 一旦使用Productivity工具分析虚拟电子表格,您就会明白为什么给出或指导CODE示例作为答案是不切实际的。只需尝试使用带有多色文本的单元格