如何使用 Word 2010 文档中的 OpenXML SDK 解锁内容控件



我正在服务器端操作Word 2010文档,并且文档中的某些内容控件已选中以下内容 锁定属性

  • 无法删除内容控件
  • 无法编辑内容

任何人都可以建议将这些锁定选项设置为 false 或使用 OpenXML SDK 完全删除吗?

openxml SDK 提供 Lock 类和LockingValues枚举对于以编程方式设置选项:

  • 无法删除内容控件,并且
  • 无法编辑内容

因此,要将这两个选项设置为"假"(LockingValues.Unlocked),搜索文档中的所有SdtElement元素,并将 Val 属性设置为 LockingValues.Unlocked .

下面的代码显示了一个示例:

static void UnlockAllSdtContentElements()
{
  using (WordprocessingDocument wordDoc =
    WordprocessingDocument.Open(@"c:tempmyword.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 属性,因此当代码执行以下指令时,它将返回异常,因为未找到元素:

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

解决此问题的方法是执行FirstOrDefault而不是First

最新更新