使用Open XML SDK通过其Tag属性查找Word复选框控件

时间:2015-06-15 15:35:57

标签: c# openxml-sdk word-2010 word-2013

我有一个包含复选框控件的Word 2013文档。我已将此复选框的标记属性设置为fooCheckBox

Screenshot showing a Word 2013 checkbox's properties

现在,我想使用Open XML SDK 2.5以编程方式查找和操作该特定复选框。我知道如何查找/枚举复选框,但我不知道如何通过标记属性查找特定的SdtContentCheckBox

如果有WordprocessingDocument doc,如何通过标记属性检索特定的SdtContentCheckBox

(我有工作代码,我将其作为answer (see below)发布。但是,我不知道这是否是正确的方法;所以如果有人知道更好,更正确的方式,我&# 39;我想看看它是如何完成的。)

1 个答案:

答案 0 :(得分:3)

显然,SdtContentCheckBox对象的.Parent属性引用了SdtProperty集合,可以查询Tag后代。

我不理解这个对象建模背后的逻辑,但它可以用来完成工作:

// using DocumentFormat.OpenXml.Packaging;
// using System.Diagnostics;
// using System.Linq;

SdtContentCheckBox TryGetCheckBoxByTag(WordprocessingDocument doc, string tag)
{
    foreach (var checkBox in doc.MainDocumentPart.Document.Descendants<SdtContentCheckBox>())
    {
        var tagProperty = checkBox.Parent.Descendants<Tag>().FirstOrDefault();
        if (tagProperty != null)
        {
            Debug.Assert(tagProperty.Val != null);
            if (tagProperty.Val.Value == tag)
            {
                // a checkbox with the given tag property was found
                return checkBox;
            }
        }
    }
    // no checkbox with the given tag property was found
    return null;
}