# Excel Blattschutz aufheben und Daten einfügen



## Todesbote (14. Jan 2014)

Hallo zusammen,
ich habe viele Excel Tabellen mit bis zu 20 Blättern. 
Die Spalten B-I sind von Zeile 1-33 zur Bearbeitung freigegeben. 
Die restlichen Spalten und Zeilen sind über den Blattschutz gesperrt.
Alle Tabellen und Blätter sind gleich aufgebaut.
Nun möchte ich am Ende von jedem Blatt, in diesem Fall Spalte B-I Zeile 36-43, etwas einfügen.

Ist es möglich den Blattschutz auch nur für diese speziellen Zeilen aufzuheben?
Wenn ja wie? 

Mfg Todesbote


----------



## Todesbote (14. Jan 2014)

Ich habe mir die Bibliotheken JXL und POI angeschaut. Wenn ich es richtig verstanden habe ist es mit beiden Bibliotheken nicht möglich einen Schreibschutz der mit einem Passwort versehen ist zu entfernen bzw einzufügen.
Oder liege ich hier falsch?

Mfg

Todesbote


----------



## Todesbote (15. Jan 2014)

Ich habe nun eventuell eine Lösung gefunden. Allerdings erhalte ich beim ausführen versch. Fehlermeldungen.

```
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;



public class XlsUtil {
	
	 public static void passwordProtect( InputStream is, OutputStream os, String password ) throws IOException {
	        HSSFWorkbook targetWorkbook = new HSSFWorkbook(is);
	        int numberOfSheets = targetWorkbook.getNumberOfSheets();
	        for (int i = 0; i < numberOfSheets; i++) {
	            HSSFSheet sheet = targetWorkbook.getSheetAt(i);
	            sheet.protectSheet(password);
	        }
	        targetWorkbook.write(os);
	    }
	    
	    public static void main(String arg[]) {
	        try{
	            InputStream is = (new FileInputStream("C:\\Eigene Dateien\\test.xls"));
	            FileOutputStream os =new FileOutputStream(new File("C:\\Eigene Dateien\\test123.xls"));
	            passwordProtect(is, os, "testPassword");
	            os.close();
	        } catch(Exception e) {
	            e.printStackTrace();
	        }
	    }


}
```

Dabei erhalte ich folgende Fehlermeldungen

```
java.io.IOException: Unable to read entire header; 0 bytes read; expected 512 bytes
	at org.apache.poi.poifs.storage.HeaderBlock.alertShortRead(HeaderBlock.java:226)
	at org.apache.poi.poifs.storage.HeaderBlock.readFirst512(HeaderBlock.java:207)
	at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
	at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303)
	at XlsUtil.passwordProtect(XlsUtil.java:16)
	at XlsUtil.main(XlsUtil.java:29)
```

Kennt jmd. die Lösung?

Mfg


----------



## Todesbote (15. Jan 2014)

Habs nun via VBA gelöst.

```
Sub BlattschutzSetzen()
    Dim sSource$, iCount%, iCounter%
    Dim wks As Worksheet
    sSource = "W:\NE-Warte\Dittrich Praxisphase 3\Schaltrechen"
    On Error Resume Next
    With Application.FileSearch
      .NewSearch
      .LookIn = sSource
      .Filename = "*.xls"
      .SearchSubFolders = True
      .Execute
      iCount = .FoundFiles.Count
      For iCounter = 1 To iCount
        Workbooks.Open Filename:=.FoundFiles(iCounter)
        For Each wks In ActiveWorkbook.Worksheets
            wks.Protect Password:="timmi"
        Next wks
        ActiveWorkbook.Close True
      Next iCounter
   End With
End Sub
[\Code]

Mfg
```


----------

