在Word中 在一个样式中设置多种字符格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Word中 在一个样式中设置多种字符格相关的知识,希望对你有一定的参考价值。

如题~~~

这话正确吗??

参考技术A 可以的!样式中包含段落和字符样式,那每个样式有可以进行相关设置。

在 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中 在一个样式中设置多种字符格的主要内容,如果未能解决你的问题,请参考以下文章

如何在Word中设置首行缩进2字符

C#/VB.NET 在Excel单元格中应用多种字体格式

通过 ClientTemplate 在 Kendo 网格中设置单元格样式

如何在 UITableView 样式分组中设置单元格的角半径?

Java 在Excel单元格中应用一种/多种字体样式

Ag Grid 部分单元格格式 - 例如如何在单元格中设置一些文本样式 - 粗体、斜体、彩色(但不是其他文本)