更改OpenXML Word文档中的字体颜色(C#)

我一直在寻找几个小时,我似乎无法找到一个可靠的答案。 我有一个包含内容控件的现有文档,我需要使用外部数据编辑文本。 如果其中一个控件的数据不存在,那么我需要用适当的通知替换文本并更改字体颜色。

我有文本条目和所有工作正常,唯一似乎无法完成其工作的部分是更改字体颜色。 我当前的代码没有给我任何错误,并且正在运行这个方法就好了,但是当我查看完成的文档时,它仍然是纯黑色文本。

我的换色方法:(输入是具有相同标签的所有内容控件的列表)

public void SetBlueText(List sdtElement) { foreach (SdtElement element in sdtElement) { if (element != null) { RunProperties runProperties = element.Descendants().FirstOrDefault(); runProperties.Color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" }; } } } 

此外,将这两行简化为此/具有相同的效果

 element.Descendants().FirstOrDefault().Color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" }; 

我遇到了类似的问题,并发现由于某种原因,将对象附加到RunProperties对象的顺序实际上会影响格式化更新是否有效(我注意到的模式是在进行格式化之前附加文本时,该文本的格式不坚持)。

例如,这是有效的(文本变为粗体,Cambria标题,颜色设置为蓝色)

 Run formattedRun = new Run(); RunProperties runPro = new RunProperties(); RunFonts runFont = new RunFonts() { Ascii = "Cambria(Headings)", HighAnsi = "Cambria(Headings)" }; Bold bold = new Bold(); Text text = new Text("TESTING"); Color color = new Color() { Val = "365F91", ThemeColor = ThemeColorValues.Accent1, ThemeShade = "BF" }; runPro.Append(runFont); runPro.Append(bold); runPro.Append(color); runPro.Append(text); formattedRun.Append(runPro); 

但这不是(文字变成Cambria标题和大胆,但颜色保持标准黑色)

 Run formattedRun = new Run(); RunProperties runPro = new RunProperties(); RunFonts runFont = new RunFonts() { Ascii = "Cambria(Headings)", HighAnsi = "Cambria(Headings)" }; Text text = new Text("TESTING"); Bold bold = new Bold(); Color color = new Color() { Val = "365F91", ThemeColor = ThemeColorValues.Accent1, ThemeShade = "BF" }; runPro.Append(runFont); runPro.Append(bold); runPro.Append(text); runPro.Append(color); formattedRun.Append(runPro); 

好吧,我有点粗暴强迫我的方式回答,但它的确有效。

 List runProps = element.Descendants().ToList(); foreach (RunProperties rp in runProps) { rp.Color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" }; } 

如果有人有一个更优雅的解决方案,请添加它,我会赞成它。

颜色值应为8位数。 例如,Color.Val =“FFFF0000”以红色显示字符串。