更改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”以红色显示字符串。
- 设置DataGridView ComboBox的默认值
- HttpClient PostAsJsonAsync与Newtonsoft.Json不兼容
- 是否可以从C ++应用程序调用C#应用程序?
- 交换Azure Web App部署槽会注销ASP.NET Core RC2中的所有用户
- 从列表C#中删除重复项
- C#涉及多个项目时的非托管出口(Robert Giesecke)
- 如何将MahApps.Metro捆绑到单个exe中
- 指定密钥太长; 最大密钥长度为767字节Entity Framework 6中的Mysql错误
- MethodImplAttribute(InternalCall,Runtime)对COM Interop接口的方法做了什么?