Modules/Private/Reporting/StyleFunctions/Start-AZTIExcelOrdening.ps1

<#
.Synopsis
Module for Excel Sheet Ordering
 
.DESCRIPTION
This script organizes the order of sheets in the Excel report.
 
.Link
https://github.com/thisismydemo/azure-scout/Modules/Private/Reporting/StyleFunctions/Start-AZTIExcelOrdening.ps1
 
.COMPONENT
This PowerShell Module is part of Azure Scout (AzureScout)
 
.NOTES
Version: 3.6.0
First Release Date: 15th Oct, 2024
Authors: Claudio Merola
#>


function Start-AZSCExcelOrdening {
    Param($File)

    $Excel = Open-ExcelPackage -Path $File
    $Worksheets = $Excel.Workbook.Worksheets

    $Order = $Worksheets | Where-Object { $_.Name -notin 'Overview','Policy', 'Advisor', 'Security Center', 'Subscriptions', 'Quota Usage', 'AdvisorScore', 'Outages', 'Support Tickets', 'Reservation Advisor', 'Cost Management', 'Security Overview', 'Azure Update Manager', 'Azure Monitor', 'Cost Dashboard', 'Security Dashboard', 'Update Manager Dashboard', 'Monitor Dashboard' } | Select-Object -Property Index, name, @{N = "Dimension"; E = { $_.dimension.Rows - 1 } } | Sort-Object -Property Dimension -Descending

    $Order0 = $Order | Where-Object { $_.Name -ne $Order[0].name -and $_.Name -ne ($Order | select-object -Last 1).Name }

    #$Worksheets.MoveAfter(($Order | select-object -Last 1).Name, 'Subscriptions')

    $Loop = 0

    Foreach ($Ord in $Order0) {
        if ($Ord.Index -and $Loop -ne 0) {
            $Worksheets.MoveAfter($Ord.Name, $Order0[$Loop - 1].Name)
        }
        if ($Loop -eq 0) {
            $Worksheets.MoveAfter($Ord.Name, $Order[0].Name)
        }
        $Loop++
    }

    Write-Debug ((get-date -Format 'yyyy-MM-dd_HH_mm_ss')+' - '+'Validating if Advisor and Policies are included.')
    if (($Worksheets | Where-Object { $_.Name -eq 'Advisor'}))
        {
            $Worksheets.MoveAfter('Advisor', 'Overview')
        }
    if (($Worksheets | Where-Object { $_.Name -eq 'Policy'}))
        {
            $Worksheets.MoveAfter('Policy', 'Overview')
        }
    if (($Worksheets | Where-Object { $_.Name -eq 'Security Center'}))
        {
            $Worksheets.MoveAfter('Security Center', 'Overview')
        }
    if (($Worksheets | Where-Object {$_.Name -eq 'Quota Usage'}))
        {
            $Worksheets.MoveAfter('Quota Usage', 'Overview')
        }
    if (($Worksheets | Where-Object {$_.Name -eq 'AdvisorScore'}))
        {
            $Worksheets.MoveAfter('AdvisorScore', 'Overview')
        }
    if (($Worksheets | Where-Object {$_.Name -eq 'Support Tickets'}))
        {
            $Worksheets.MoveAfter('Support Tickets', 'Overview')
        }
    if (($Worksheets | Where-Object {$_.Name -eq 'Reservation Advisor'}))
        {
            $Worksheets.MoveAfter('Reservation Advisor', 'Overview')
        }
    $Worksheets.MoveAfter('Subscriptions','Overview')

    # Re-anchor all data tabs after the blue tab group in row-count order
    if ($Order.Count -gt 0) {
        # Advisor was moved first so it is the rightmost blue tab; fall back through the chain
        $RightmostBlue = 'Subscriptions'
        foreach ($Name in @('Advisor','Policy','Security Center','Quota Usage','AdvisorScore','Support Tickets','Reservation Advisor')) {
            if ($Worksheets | Where-Object { $_.Name -eq $Name }) {
                $RightmostBlue = $Name
                break
            }
        }
        $PreviousTab = $RightmostBlue
        foreach ($DataTab in $Order) {
            $Worksheets.MoveAfter($DataTab.Name, $PreviousTab)
            $PreviousTab = $DataTab.Name
        }
    }

    $WS = $Excel.Workbook.Worksheets | Where-Object { $_.Name -eq 'Overview' }

    $WS.SetValue(75,70,'')
    $WS.SetValue(76,70,'')
    $WS.View.ShowGridLines = $false

    $TabDraw = $WS.Drawings.AddShape('TP00', 'RoundRect')
    $TabDraw.SetSize(130 , 78)
    $TabDraw.SetPosition(1, 0, 0, 0)
    $TabDraw.TextAlignment = 'Center'

    Close-ExcelPackage $Excel

}