Вопрос по – Как разблокировать элемент управления содержимым с помощью OpenXML SDK в документе Word 2010?

6

Я манипулирую документом Word 2010 на стороне сервера, и для некоторых элементов управления содержимым документа установлены следующие свойства блокировки

Content control cannot be deleted Contents cannot be edited

Кто-нибудь может посоветовать установить для этих параметров блокировки значение false или вообще удалить, используя OpenXML SDK?

Ваш Ответ

2   ответа
5

Lock класс иLockingValues перечисление для программной установки параметров:

Контент контроль не может быть удален и Содержание не может быть отредактировано

Так, чтобы установить эти два параметра в «ложь» LockingValues.Unlocked), поиск всехSdtElement элементов в документе и установитьVal свойствоLockingValues.Unlocked.

Код ниже показывает пример:

static void UnlockAllSdtContentElements()
{
  using (WordprocessingDocument wordDoc =
    WordprocessingDocument.Open(@"c:\temp\myword.docx", true))
  {        
    IEnumerable<SdtElement> elements = 
      wordDoc.MainDocumentPart.Document.Descendants<SdtElement>();

    foreach (SdtElement elem in elements)
    {
      if (elem.SdtProperties != null)
      {
        Lock l = elem.SdtProperties.ChildElements.First<Lock>();

        if (l == null)
        {              
          continue;
        }

        if (l.Val == LockingValues.SdtContentLocked)
        {
          Console.Out.WriteLine("Unlock content element...");
          l.Val = LockingValues.Unlocked;
        }
      }
    }
  }
}

static void Main(string[] args)
{
  UnlockAllSdtContentElements();
}
1

кто копирует этот код, имейте в виду, что если нет никаких блокировок, связанных с элементом управления контентом, тогда не будет связанного с ним свойства Lock, поэтому, когда код выполняет следующую инструкцию, он вернет исключение, так как элемент не найден:

Lock l = elem.SdtProperties.ChildElements.First ();

Чтобы исправить это, используйте FirstOrDefault вместо First.

Должен быть добавлен в качестве комментария к соответствующему решению Ori Price
Hi @OriPrice, я не могу прокомментировать решение, так как моя репутация ниже 50. С уважением. Hugo Barona

Похожие вопросы