2012-05-23 7 views
6

私は、サーバー側でのWord 2010文書を操作していますし、文書内のコンテンツコントロールのいくつかは、以下のロックのプロパティはWord 2010文書のOpenXML SDKを使用してコンテンツコントロールをロック解除するにはどうすればよいですか?

  • コンテンツコントロールが
  • 内容が
を編集することはできません削除することはできませんチェックしています

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

答えて

5

の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(); 
} 
1

ただ、このコードをコピーしたもののために、コンテンツコントロールに関連付けられたロックが存在しない場合は、[ロックがないことに注意してくださいプロパティが関連付けられているため、コードで次の命令を実行すると、要素が見つからないため例外が返されます。

ロックl = elem.SdtProperties.ChildElements.First();

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

+0

関連ソリューションへのコメントとして追加する必要があります –

+0

こんにちは@OriPrice、私の評判が50未満ですので、私は解決策にコメントすることはできません。 –

関連する問題