首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Word 2010文档中使用OpenXML SDK解锁内容控件?

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

Stack Overflow用户
提问于 2012-05-23 21:55:11
回答 2查看 2K关注 0票数 6

我在服务器端操作一个Word 2010文档,文档中的一些内容控件将检查以下锁定属性

deleted

  • Contents不能编辑
  • 内容控件不能编辑

有人能建议将这些锁定选项设置为false或删除,然后使用OpenXML SDK吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-04 19:31:22

openxml提供了Lock类和以编程方式设置选项的LockingValues枚举:

  • 内容控件不能被删除,
  • 内容不能编辑

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

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

代码语言:javascript
复制
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();
}
票数 5
EN

Stack Overflow用户

发布于 2016-06-30 10:26:44

对于复制此代码的人,请记住,如果没有与内容控件相关联的锁,那么就不会有与其关联的Lock属性,因此当代码执行以下指令时,它将返回一个异常,因为没有找到任何元素:

代码语言:javascript
复制
Lock l = elem.SdtProperties.ChildElements.First<Lock>();

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10728442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档