サーバー側で Word 2010 文書を操作していますが、文書内の一部のコンテンツ コントロールで次のロック プロパティがオンになっています。
- コンテンツ コントロールを削除できません
- コンテンツは編集できません
これらの Locking オプションを false に設定するか、OpenXML SDK を使用して完全に削除するようアドバイスできますか?
サーバー側で Word 2010 文書を操作していますが、文書内の一部のコンテンツ コントロールで次のロック プロパティがオンになっています。
これらの Locking オプションを false に設定するか、OpenXML SDK を使用して完全に削除するようアドバイスできますか?
openxml SDKは、プログラムでオプションを設定するためのLock
クラスとLockingValues
列挙を提供します。
したがって、これら2つのオプションを「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
。