我在服务器端操作一个Word 2010文档,文档中的一些内容控件将检查以下锁定属性
deleted
有人能建议将这些锁定选项设置为false或删除,然后使用OpenXML SDK吗?
发布于 2012-06-04 19:31:22
openxml提供了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();
}发布于 2016-06-30 10:26:44
对于复制此代码的人,请记住,如果没有与内容控件相关联的锁,那么就不会有与其关联的Lock属性,因此当代码执行以下指令时,它将返回一个异常,因为没有找到任何元素:
Lock l = elem.SdtProperties.ChildElements.First<Lock>();解决这个问题的方法是执行FirstOrDefault而不是First。
https://stackoverflow.com/questions/10728442
复制相似问题