Извлечение заголовков массива и сохранение их порядка

я написал функцию, которая создает файл XLS из массива. Все работает хорошо, но я столкнулся с проблемой при извлечении заголовков из моего массива.

Мои заголовки организованы в алфавитном порядке после извлечения, но я хочу сохранить их в том же порядке, что и мой входной массив.

function DoTheMagicExcel {
    [cmdletbinding()]
    Param(
        <# Array to work on #>
        [Parameter( Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [Array]$MyArray,
        <# Its Excel Sheet name #>
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [alias('Sheet')]
        [string]$MySheetName,
        <# Excel file name #>
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [ValidatePattern("\.(csv|xls)$")]
        [alias('XlsFile')]
        [string]$MyExcelFile
    )
    Begin {
        <# Init them all #>
        $excel = new-object -comobject Excel.Application
        $excel.visible = $False
        $excel.DisplayAlerts = $False
        $XlsAlreadyExist = $False
        if (Test-Path $MyExcelFile) {
            Write-Output "Fichier Excel deja existant"
            $XlsAlreadyExist = $true
            $workbook = $excel.Workbooks.open("$PSScriptRoot\$MyExcelFile")
            $workbook.Worksheets.Add() | Out-Null
            $workbook.WorkSheets.item(1).Name = $MySheetName
            $MySheet = $workbook.Worksheets.Item($MySheetName)
        }
        else {
            $workbook = $excel.Workbooks.Add()
            $workbook.WorkSheets.item(1).Name = $MySheetName
            $MySheet = $workbook.Worksheets.Item($MySheetName)
        }
        $MyHeadercolumn = 1
        $StartRow = 2
    }
    Process {
        $MyArrayHeader = $MyArray | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty 'Name'
        foreach ($header in $MyArrayHeader) {
            $MySheet.cells.item(1, $MyHeadercolumn).font.bold = $true
            $MySheet.cells.item(1, $MyHeadercolumn) = $header
            $MyHeadercolumn++
        }
        foreach ($ThisRow in $MyArray) { ......

я имею в виду это

$AllBcksummary[1] |ft -AutoSize

Server       RG     Environment Availibility Vault   Status Regle                 Dernier Backup      Type
-------      --     ----------- ------------ ------  ------ -----                 --------------      ----
SEFRAPB0106  RG_AXL production  NOT SET      backup Healthy Policy14512-BDay-Prod 24/01/2018 19:22:15 AppConsistent


$MyArrayHeader = $AllBcksummary | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty 'Name'

$MyArrayHeader |ft -AutoSize
Availibility
Coffre
Dernier Backup
Environment
Regle
RG
Serveur
Status
Type

Затем, когда я создаю свой Excel, я больше не сохраняю его первоначальный порядок

foreach ($header in $MyArrayHeader) {
            $MySheet.cells.item(1, $MyHeadercolumn).font.bold = $true
            $MySheet.cells.item(1, $MyHeadercolumn) = $header
            $MyHeadercolumn++
        }

если у вас есть идея ... :) Спасибо


person Folk    schedule 25.01.2018    source источник
comment
Если вы используете оператор Select, поместите имена заголовков в том порядке, в котором вы хотите, перед передачей в таблицу или команду экспорта.   -  person trebleCode    schedule 25.01.2018


Ответы (2)


Это должно сработать :)

$AllBcksummary.psobject.properties | select Name

Из Как получить свойства объекта powershell в том же порядке, что и список форматов? ;)

person lpaso    schedule 26.01.2018

Почти :)

$AllBcksummary.psobject.properties | select name

Name
----
Capacity
Count
IsFixedSize
IsReadOnly
IsSynchronized
SyncRoot

но добавление индекса 0 делает свое дело!

$AllBcksummary[0].psobject.properties | select name

Name
----
Serveur
RG
Environment
Availibility
Coffre
Status
Regle
Dernier Backup
Type

Спасибо, парни

person Folk    schedule 29.01.2018