2015-06-15 5 views
0

У меня есть документ Word 2013, содержащий элемент управления флажком. Я поставил Tag свойства этого флажка на fooCheckBox:Найти элемент управления флажком Word по свойству тега с помощью Open XML SDK

Screenshot showing a Word 2013 checkbox's properties

Теперь я хотел бы программно найти и управлять этим конкретным флажком с помощью Open XML SDK 2.5. Я знаю, как найти/перечислить флажки, но я не знаю, как найти конкретную SdtContentCheckBox его Tag свойства:

Учитывая WordprocessingDocument doc, как я могу извлечь конкретные SdtContentCheckBox «S его Tag имущество?

(У меня есть рабочий код, который я размещаю как answer (see below).Однако я понятия не имею, правильно ли это сделать, поэтому, если кто-то знает лучше, более подходящий способ, я бы хотел посмотрим, как это делается.)

ответ

2

по-видимому, .Parent них свойства SdtContentCheckBox объекта ссылается на 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; 
}