6

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

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

谁能建议使用 OpenXML SDK 将这些锁定选项设置为 false 或完全删除?

4

2 回答 2

5

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();
}
于 2012-06-04T19:31:22.373 回答
1

只是对于那些复制这段代码的人,请记住,如果没有与内容控件关联的 Locks,则不会有与之关联的 Lock 属性,因此当代码执行以下指令时,它将返回一个异常,因为没有找到元素:

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

解决这个问题的方法是FirstOrDefault代替First.

于 2016-06-30T10:26:44.160 回答