我一直在寻找几个小时,我似乎无法找到一个可靠的答案.我有一个包含内容控件的现有文档,我需要使用外部数据编辑文本.如果其中一个控件的数据不存在,那么我需要用适当的通知替换文本并更改字体颜色.
我有文本条目和所有工作正常,唯一似乎无法完成其工作的部分是更改字体颜色.我当前的代码没有给我任何错误,并且正在运行这个方法就好了,但是当我查看完成的文档时,它仍然是纯黑色文本.
我的换色方法:(输入是具有相同标签的所有内容控件的列表)
public void SetBlueText(List<SdtElement> sdtElement)
{
foreach (SdtElement element in sdtElement)
{
if (element != null)
{
RunProperties runProperties = element.Descendants<RunProperties>().FirstOrDefault();
runProperties.Color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" };
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,将这两行简化为此/具有相同的效果
element.Descendants<RunProperties>().FirstOrDefault().Color =
new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" };
Run Code Online (Sandbox Code Playgroud)
Jos*_*uty 12
我遇到了类似的问题,并发现由于某种原因,将对象附加到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);
Run Code Online (Sandbox Code Playgroud)
但这不是(文字变成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);
Run Code Online (Sandbox Code Playgroud)
嗯,我有点粗暴强迫我的方式回答,但它的确有效.
List<RunProperties> runProps = element.Descendants<RunProperties>().ToList();
foreach (RunProperties rp in runProps)
{
rp.Color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" };
}
Run Code Online (Sandbox Code Playgroud)
如果有人有一个更优雅的解决方案,请添加它,我会upvote它.