Set-FreezePane.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function Set-FreezePane {
    <#
    .SYNOPSIS
        Set FreezePanes on a specified worksheet
 
    .DESCRIPTION
        Set FreezePanes on a specified worksheet
     
    .PARAMETER Worksheet
        Worksheet to add FreezePanes to
     
    .PARAMETER Row
        The first row with live data.
 
        Examples and outcomes:
            -Row 2 Freeze row 1
            -Row 5 Freeze rows 1 through 4
 
    .PARAMETER Column
        Examples and outcomes:
            -Column 2 Freeze column 1
            -Column 5 Freeze columns 1 through 4
 
    .PARAMETER Passthru
        If specified, pass the Worksheet back
 
    .EXAMPLE
        $WorkSheet | Set-FreezePane
 
        #Freeze the top row of $Worksheet (default parameter values handle this)
 
    .EXAMPLE
        $WorkSheet | Set-FreezePane -Row 2 -Column 4
 
        # Freeze the top row and top 3 columns of $Worksheet
 
    .NOTES
        Thanks to Doug Finke for his example:
            https://github.com/dfinke/ImportExcel/blob/master/ImportExcel.psm1
 
        Thanks to Philip Thompson for an expansive set of examples on working with EPPlus in PowerShell:
            https://excelpslib.codeplex.com/
 
    .LINK
        https://github.com/RamblingCookieMonster/PSExcel
 
    .FUNCTIONALITY
        Excel
    #>

    [cmdletbinding()]
    param(
        [parameter( Mandatory=$true,
                    ValueFromPipeline=$true,
                    ValueFromPipelineByPropertyName=$true)]
        [OfficeOpenXml.ExcelWorksheet]$WorkSheet,

        [int]$Row = 2,

        [int]$Column = 1,

        [switch]$Passthru
    
    )
    Process
    {
        $WorkSheet.View.FreezePanes($Row, $Column)
        if($Passthru)
        {
            $WorkSheet
        }
    }
}