Excel – Blattschutz und Arbeitsmappenschutz entfernen ohne VBA

Zum Thema Blattschutz entfernen hatte ich vor einigen Jahren schonmal einen Artikel geschrieben. Die damlige Lösung basierte auf VBA und konnte mit minimalen Anpassungen auch zur Entfernung des Arbeitsmappenschutzes genutzt werden.

Inzwischen haben sich die neuen, XML-basierten Dateiformate bei Office durchgesetzt. Gleichzeitig habe ich öfter mit sehr großen und komplexen Dateien zu tun, welche sehr umfangreiche formel- und vba-basierte Berechnungen durchführen. Und an diesen beißt sich der VBA-Code die Zähne aus, das Makro hängt sich jedes Mal auf.

Der Blattschutz ist mir diesmal relativ egal, aber es gibt viele ausgeblendete Tabellen, auf die ich nicht zugreifen kann, weil der Arbeitsmappenschutz aktiviert ist. Und vom Ersteller bekomme ich das Passwort zur Entsperrung nicht, also muss ein anderer Weg eingschlagen werden.

Jede XLSX oder XLSM Datei ist technisch gesehen eine einfache ZIP Datei, die lediglich anders benannt wurde. Dementsprechend können diese Dateien auch ohne Probleme beispielsweise mit 7-ZIP geöffnet werden.

Zum Entfernen des Arbeitsmappenschutzes muss man in das Verzeichnis xl wechseln. Darin befindet sich die Datei workbook.xml, welche man in einem beliebigen Editor öffnen und bearbeiten kann.

In der Datei findet sich u.a. der Eintrag workbookProtection. Beginnend mit der öffnenden Klammer < muss alles gelöscht werden bis einschließlich der schließenden Klammer >.

<workbookProtection lockStructure="1" workbookSpinCount="100000" workbookSaltValue="b7WAv05ksgLR0E3x3nlYCg==" workbookHashValue="TOaGVYao3ah4IKqjrennOoxuddk8JGosjNT8JEQ0bqyzPQxB6fT48JQjfojWc6vhU8vb+6XfTJIMpMxzh1KBqw==" workbookAlgorithmName="SHA-512"/>

Die Änderungen müssen nun gespeichert und in die ZIP bzw. XLSX übernommen werden.

Für den Blattschutz geht man genauso vor. Die einzelnen Tabellenblätter finden sich unter xl\worksheets.

In jeder sheetx.xml befinet sich, sofern ein Blattschutz gesetzt wurde, am Ende der Datei ein Eintrag sheetProtection. Wie auch schon zuvor muss dieser nun einschließlich öffnender < und schließender Klammer > gelöscht und anschließend gespeichert werden.

<sheetProtection selectLockedCells="1" scenarios="1" objects="1" sheet="1" spinCount="100000" saltValue="EJG0zN1PlCjm9Y3x0AN9jg==" hashValue="haQ0pxbUa6FRdeJJLH1dZPLrRkiTP72SE7CYeBOqRuDJpZrccSfSEFbcg+kIVq2/CQW4RpYDO58+JFt326xrGA==" algorithmName="SHA-512"/>

Kommt sowas öfter vor und man ist etwas bewandert im Coden, kann man sich natürlich ein kleines Script schreiben, welches automatisch eine XLSX entpackt, in allen relevanten Dateien nach den entsprechenden Tags sucht, diese löscht und anschließend neu komprimiert. So ließen sich auch ganze Verzeichnisse mit wenig Aufwand verarbeiten.