Public/ConvertTo-PSUExcelFile.ps1


function ConvertTo-PSUExcelFile {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [object[]]$DataObject,

        [Parameter(Mandatory)]
        [string]$ExcelPath
    )

    try {
        # Export data and return Excel package object
        $excelPackage = $DataObject | Export-Excel -Path $ExcelPath -WorksheetName Sheet1 -AutoSize -PassThru -ErrorAction Stop

        # Get worksheet
        $ws = $excelPackage.Workbook.Worksheets['Sheet1']

        # Style entire data range
        $usedRange = $ws.Dimension.Address
        $rangeStyle = @{
            Worksheet       = $ws
            Range           = $usedRange
            BorderAround    = 'Thick'
            BorderBottom    = 'Thin'
            BorderTop       = 'Thin'
            BorderLeft      = 'Thin'
            BorderRight     = 'Thin'
            FontName        = 'Calibri'
            FontSize        = 10.5
            AutoSize        = $true
            BackgroundColor = 'LightGray'
        }
        Set-ExcelRange @rangeStyle

        # Header formatting (row 1)
        Set-ExcelRange -Worksheet $ws -Range "1:1" -Bold -BackgroundColor Black -FontColor White

        # Freeze top row
        $ws.View.FreezePanes(2, 1)

        # Save the Excel file
        Close-ExcelPackage $excelPackage
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}