2012-05-23 3 views
6

나는 서버 측에 워드 2010 문서를 조작하고 콘텐츠 컨트롤의 일부는 문서에 다음과 같은 잠금 속성Word 2010 문서에서 OpenXML SDK를 사용하여 콘텐츠 컨트롤의 잠금을 해제하려면 어떻게해야합니까?

을 확인했다
  • 내용 제어는
  • 내용은 편집 할 수 없습니다 삭제할 ​​수 없습니다

누구나 OpenXML SDK를 사용하여 이러한 잠금 옵션을 false로 설정하거나 제거 할 것을 조언 할 수 있습니까? 에

    콘텐츠 컨트롤은 삭제할 수 없습니다
  • 내용은

그래서 편집 할 수 없습니다 :

답변

5

OPENXML이 SDK는 프로그래밍 옵션을 설정하기위한 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(); 
} 
1

속성과 연결되어 있으므로 코드에서 다음 명령을 실행하면 요소가 없으므로 예외가 반환됩니다.

잠금 l = elem.SdtProperties.ChildElements.First();

이 문제를 해결하는 방법은 First 대신 FirstOrDefault를 수행하는 것입니다.

+0

해당 솔루션에 대한 의견으로 추가해야합니다. –

+0

안녕하세요 @OriPrice, 내 평판이 50 세 이하이므로 해결책을 말씀 드릴 수 없습니다. –

관련 문제