StarBasic FAQWissen, das weiterhilft.

Tabellen - Calc

Wie kann man Tabellen und Zellen schützen?

Um Tabellen und Zellen per Makro zu schützen muss man einige Besonderheiten beachten.
Tabellen kann man mit Passwort schützen. Dies verhindert aber nur den Eingriff in die Tabelle. Der Inhalt der Tabelle kann trotzdem durch ein einfaches Kopieren der Zellen in eine neue Datei ohne Schutz übertragen werden. Um dies für die Formeln zu verhindern sollte man diese ausblenden. ( Format-> Zellen ->Zellschutz -> Formeln ausblenden aktivieren.
Zellen sind nur dann geschützt wenn die Tabelle geschützt ist. Möchte man, dass Zellen ungeschützt sind muss, man diese vor dem Schutz entsperren. Auch per Makro ist dies nur möglich wenn die Tabelle ungeschützt ist.
Man darf auf keinen Fall den Tabellen- und Zellenschutz mit einem echten Schutz der Daten und Formeln verwechseln. Es handelt sich vor allem um einen Schutz vor falschen Eingaben in einem Formular.
Wie werden einzelne Tabellen geschützt?
Basic
odoc=thiscomponent  oSheets=odoc.sheets  oSheet = oDoc.Sheets(0)
'oder oSheet = oDoc.Sheets().getByName("Tabelle1")  oSheet.protect("Test")
Passwort : Test
Mit  oSheet.unprotect("Test")  wird der Schutz aufgehoben.
Um einzelne Zellen zu schützen oder den Schutz zu deaktivieren verwendet man das Struct com.sun.star.util.CellProtection
Dim myProtection As New com.sun.star.util.CellProtection
ocell = mysheet.getCellByPosition(0,0)
myProtection.IsLocked=false
oCell.CellProtection=myProtection
Weitere Parameter in dem Struct sind:
isFormulaHidden -> Die Formel wird bei Tabellenschutz ausgeblendet.
isHidden -> Der Inhalt wird bei Tabellenschutz ausgeblendet.
isPrintHidden -> Der Inhalt der Zelle wird bei Tabellenschutz nicht gedruckt.
Um also eine Zelle in einer geschützten Tabelle zu ändern muss man beides durchführen
Basic
odoc=thiscomponent  oSheets=odoc.sheets  oSheet = oDoc.Sheets(0)   
oSheet.unprotect("Test")
Dim myProtection As New com.sun.star.util.CellProtection  ocell = mysheet.getCellByPosition(0,0)  myProtection.IsLocked=false  oCell.CellProtection=myProtection
oSheet.protect("Test")
Eine kleine kurze Prozedur für den Schutz von Zellen steht in den Tools