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