-
Notifications
You must be signed in to change notification settings - Fork 410
/
Copy pathSet-WorksheetProtection.ps1
55 lines (53 loc) · 2.5 KB
/
Set-WorksheetProtection.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function Set-WorksheetProtection {
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingfunctions', '',Justification='Does not change system state')]
param (
[Parameter(Mandatory=$true)]
[OfficeOpenXml.ExcelWorksheet]$Worksheet ,
[switch]$IsProtected,
[switch]$AllowAll,
[switch]$BlockSelectLockedCells,
[switch]$BlockSelectUnlockedCells,
[switch]$AllowFormatCells,
[switch]$AllowFormatColumns,
[switch]$AllowFormatRows,
[switch]$AllowInsertColumns,
[switch]$AllowInsertRows,
[switch]$AllowInsertHyperlinks,
[switch]$AllowDeleteColumns,
[switch]$AllowDeleteRows,
[switch]$AllowSort,
[switch]$AllowAutoFilter,
[switch]$AllowPivotTables,
[switch]$BlockEditObject,
[switch]$BlockEditScenarios,
[string]$LockAddress,
[string]$UnLockAddress
)
if ($PSBoundParameters.ContainsKey('isprotected') -and $IsProtected -eq $false) {$worksheet.Protection.IsProtected = $false}
elseif ($IsProtected) {
$worksheet.Protection.IsProtected = $true
foreach ($ParName in @('AllowFormatCells',
'AllowFormatColumns', 'AllowFormatRows',
'AllowInsertColumns', 'AllowInsertRows', 'AllowInsertHyperlinks',
'AllowDeleteColumns', 'AllowDeleteRows',
'AllowSort' , 'AllowAutoFilter', 'AllowPivotTables')) {
if ($AllowAll -and -not $PSBoundParameters.ContainsKey($Parname)) {$worksheet.Protection.$ParName = $true}
elseif ($PSBoundParameters[$ParName] -eq $true ) {$worksheet.Protection.$ParName = $true}
}
if ($BlockSelectLockedCells) {$worksheet.Protection.AllowSelectLockedCells = $false }
if ($BlockSelectUnlockedCells) {$worksheet.Protection.AllowSelectUnLockedCells = $false }
if ($BlockEditObject) {$worksheet.Protection.AllowEditObject = $false }
if ($BlockEditScenarios) {$worksheet.Protection.AllowEditScenarios = $false }
}
Else {Write-Warning -Message "You haven't said if you want to turn protection off, or on." }
if ($LockAddress) {
Set-ExcelRange -Range $Worksheet.cells[$LockAddress] -Locked
}
elseif ($IsProtected) {
Set-ExcelRange -Range $Worksheet.Cells -Locked
}
if ($UnlockAddress) {
Set-ExcelRange -Range $Worksheet.cells[$UnlockAddress] -Locked:$false
}
}