我正在服务器端操作 Word 2010 文档,并且文档中的某些内容控件检查了以下锁定属性
- 无法删除内容控制
- 内容无法编辑
谁能建议使用 OpenXML SDK 将这些锁定选项设置为 false 或完全删除?
我正在服务器端操作 Word 2010 文档,并且文档中的某些内容控件检查了以下锁定属性
谁能建议使用 OpenXML SDK 将这些锁定选项设置为 false 或完全删除?
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();
}
只是对于那些复制这段代码的人,请记住,如果没有与内容控件关联的 Locks,则不会有与之关联的 Lock 属性,因此当代码执行以下指令时,它将返回一个异常,因为没有找到元素:
Lock l = elem.SdtProperties.ChildElements.First<Lock>();
解决这个问题的方法是FirstOrDefault
代替First
.