簡體   English   中英

如何使用Word 2010文檔中的OpenXML SDK解鎖內容控件?

[英]How do I unlock a content control using the OpenXML SDK in a Word 2010 document?

我在服務器端操作Word 2010文檔,文檔中的一些內容控件檢查了以下鎖定屬性

  • 內容控制無法刪除
  • 內容無法編輯

任何人都可以建議將這些鎖定選項設置為false或者使用OpenXML SDK完全刪除嗎?

openxml SDK提供了Lock類和LockingValues枚舉,用於以編程方式設置選項:

  • 內容控制無法刪除
  • 內容無法編輯

因此,要將這兩個選項設置為“false”( 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();
}

對於復制此代碼的人,請記住,如果沒有與內容控件關聯的鎖,則不會有與之關聯的Lock屬性,因此當代碼執行以下指令時,它將返回異常,因為沒有找到元素:

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

解決這個問題的方法是使用FirstOrDefault而不是First。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM