2012-05-23 12 views

Antwort

5

Das openxml SDK bietet die Lock Klasse und die LockingValues Aufzählung für programmatisch die Optionen einstellen:

  • Content-Steuerelement kann nicht gelöscht werden und
  • Inhalte können nicht

So bearbeitet werden, zu setze diese beiden Optionen auf "false" (LockingValues.Unlocked), suche nach allen SdtElement Elementen im Dokument und setze die Val Eigenschaft zu LockingValues.Unlocked.

Der folgende Code zeigt ein Beispiel:

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

Nur für diejenigen, die diesen Code kopieren, denken Sie daran, dass, wenn es keine Schlösser an den Inhalt Steuerelement zugeordnet ist, dann wird es keine Sperre sein Wenn der Code die folgende Anweisung ausführt, wird eine Ausnahme zurückgegeben, da kein Element gefunden wurde:

Sperre l = elem.SdtProperties.ChildElements.First();

Der Weg, um dies zu beheben, ist der FirstOrDefault anstelle von First.

+0

Sollte als Kommentar zu relevanten Lösung hinzugefügt werden –

+0

Hallo @OriPrice, kann ich die Lösung nicht kommentieren, da mein Ruf unter 50 ist. Grüße. –