在Word中 在一个样式中设置多种字符格
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Word中 在一个样式中设置多种字符格相关的知识,希望对你有一定的参考价值。
如题~~~
这话正确吗??
在 OpenXml 复选框 word2013 中设置值
【中文标题】在 OpenXml 复选框 word2013 中设置值【英文标题】:Setting the value in OpenXml checkbox word2013 【发布时间】:2015-08-19 16:39:53 【问题描述】:所以我有一个正在通过 WPF(C#) 应用程序编辑的文档。 我已成功编辑纯文本内容控件,但现在我卡住了选中/取消选中表单中的复选框。
我成功找到了复选框并设置了值并保存了文档,但是当我打开它时,设置为 true 的复选框从未在 word 文档中被选中。
这是我用来操作复选框的代码。 注意:我在标签级别访问复选框,因此 field.parent.parent
private static void SetCheckBox(OpenXmlElement field, bool isChecked)
var checkBox = field.Parent.Parent.Descendants<SdtContentCheckBox>().ToList();
foreach (var check in checkBox)
if (isChecked)
check.Checked.Val = OnOffValues.True;
else
check.Checked.Val = OnOffValues.False;
MessageBox.Show(check.Checked.Val);
当我在 MessageBox 中显示值时,它们显示 0/1 表示真/假。所以它们实际上正在设置中。
我这样做正确吗?
【问题讨论】:
【参考方案1】:看来不仅必须设置复选框的Checked
值,还必须更改Text
值。
所以我最近的代码也有一些改动,但它改变了复选框的麻烦方面。
代码:
private static void SetCheckBox(OpenXmlElement field, bool isChecked)
if (isChecked)
field.Parent.Parent.FirstChild.GetFirstChild<SdtContentCheckBox>().Checked.Val = OnOffValues.True;
field.Parent.Parent.Descendants<Run>().First().GetFirstChild<Text>().Text = "☒";
else
field.Parent.Parent.FirstChild.GetFirstChild<SdtContentCheckBox>().Checked.Val = OnOffValues.False;
field.Parent.Parent.Descendants<Run>().First().GetFirstChild<Text>().Text = "☐";
浓缩:
private static void SetCheckBox(OpenXmlElement field, bool isChecked)
field.Parent.Parent.FirstChild.GetFirstChild<SdtContentCheckBox>().Checked.Val = isChecked ? OnOffValues.True : OnOffValues.False;
field.Parent.Parent.Descendants<Run>().First().GetFirstChild<Text>().Text = isChecked ? "☒" : "☐";
【讨论】:
这能解决你的问题吗? @MaximePorté 是的 如果此代码解决了问题,请将其标记为答案。【参考方案2】:解决问题的另一个版本的代码:
private void ResetFile(string filePath)
using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
try
string uncheckValue = "☐";
string checkValue = "☒";
foreach (SdtContentCheckBox ctrl in doc.MainDocumentPart.Document.Body.Descendants<SdtContentCheckBox>())
if (ctrl.Checked.Val == OnOffValues.One)
ctrl.Checked.Val = OnOffValues.Zero;
if (ctrl.Parent.Parent.Descendants<SdtContentRun>().ToList().Count > 0)
SdtContentRun text = (SdtContentRun)ctrl.Parent.Parent.Descendants<SdtContentRun>().ToList()[0];
text.InnerXml = text.InnerXml.Replace(checkValue, uncheckValue);
doc.MainDocumentPart.Document.Save();
catch
【讨论】:
以上是关于在Word中 在一个样式中设置多种字符格的主要内容,如果未能解决你的问题,请参考以下文章
通过 ClientTemplate 在 Kendo 网格中设置单元格样式