6

サーバー側で Word 2010 文書を操作していますが、文書内の一部のコンテンツ コントロールで次のロック プロパティがオンになっています。

  • コンテンツ コントロールを削除できません
  • コンテンツは編集できません

これらの Locking オプションを false に設定するか、OpenXML SDK を使用して完全に削除するようアドバイスできますか?

4

2 に答える 2

5

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();
}
于 2012-06-04T19:31:22.373 に答える
1

このコードをコピーする人のために、コンテンツ コントロールに関連付けられた Locks がない場合、それに関連付けられた Lock プロパティがないことに注意してください。そのため、コードが次の命令を実行すると、要素が見つからないため例外:

Lock l = elem.SdtProperties.ChildElements.First<Lock>();

これを修正する方法は、 のFirstOrDefault代わりに を実行することですFirst

于 2016-06-30T10:26:44.160 に答える