将C#与Open XML SDK 2.5一起使用如何将单元格的值设置为特定的单个字体颜色

时间:2014-12-02 16:17:58

标签: c# excel openxml openxml-sdk

我想从当前输出的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)

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

1 个答案:

答案 0 :(得分:1)

您需要做的是创建shared strings,并将每个字母设置为您需要的颜色。然后将尽可能多的人追加到你想要的细胞中。

编辑 -

下载OpenXMLSDKToolV25.msi

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

现在您需要做的是手动创建一个Excel表格[在您的情况下具有多颜色文本]然后使用生产力工具打开此Excel文件并理解CODE。请注意,您需要了解电子表格文件结构才能理解此代码[请参阅this] ..现在使用生产力工具代码编写代码以满足您的要求

注意 - 一旦使用Productivity工具分析虚拟电子表格,您就会明白为什么给出或指导CODE示例作为答案是不切实际的。只需尝试使用带有多色文本的单元格