2017-03-10 6 views
1

docx에서 콘텐츠 컨트롤을 태그로 읽고 있습니다. 액세스 차단 (사용자가 콘텐츠를 수정할 수 없음). 어떻게해야합니까? - 읽기 전용 컨텐츠를 만들 것입니다 당신은 SdtProperties - 요소에 Lock (<w:lock>)의 요소를 삽입 할 수 있습니다콘텐츠 컨트롤에 대한 액세스를 차단하는 방법 - open xml

using (WordprocessingDocument wordDocTarget = WordprocessingDocument.Open(targetFilePath, true)) 
{ 
     MainDocumentPart mainPartSource = wordDocSource.MainDocumentPart; 
     SdtBlock sdtBlock = mainPartSource.Document.Body.Descendants<SdtBlock>().Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == "myTagName").SingleOrDefault(); 

     // rest of my code (editing inner text) 
} 

답변

2

: 다음은 DOCX 문서에서 해당 태그 이름에 의해 통제를 받고 내 코드입니다. 예를 들어이 읽기 전용 Word에서 문서를 편집 할 때 표시되는 텍스트 '안녕하세요'를 포함하는 일반 텍스트 콘텐츠 컨트롤을 정의

당신이 잠금 추가하려면이 같은 것을 사용할 수있는 코드에서
<w:document> 
    <w:body> 
     <w:sdt> 
      <w:sdtPr> 
       <w:lock w:val="contentLocked" /> 
       <w:text /> 
      </w:sdtPr> 
      <w:sdtContent> 
       <w:p> 
        <w:r> 
         <w:t>hello</w:t> 
        </w:r> 
       </w:p> 
      </w:sdtContent> 
     </w:sdt> 
    ... 
    </w:body> 
</w:document> 

:

using (var document = WordprocessingDocument.Open(@"c:\temp\test.docx", true)) 
{ 
    SdtBlock sdtBlock = 
     document 
     .MainDocumentPart 
     .Document 
     .Body 
     .Descendants<SdtBlock>() 
     .Where(b => b.SdtProperties.GetFirstChild<Tag>().Val == "myTagName") 
     .SingleOrDefault(); 

    var contentLock = new Lock { Val = LockingValues.SdtContentLocked }; 
    sdtBlock.SdtProperties.AppendChild(contentLock); 
} 

Word 문서로 시작한 다음 Word에서 생성 한 XML을 보려면 OpenXML Productivity Tool을 사용하는 것이 유용하다는 것을 알았습니다.

+0

고마워요! 그것은 위대한 작품 :) 그리고 그 sdtBlock.SdtProperties.RemoveAllChildren을 추가 (); SdtBlock을 차단 해제합니다. – daniell89