Jump to content

Powershell - Import-CSV ohne Spaltensortierung


Direkt zur Lösung Gelöst von cascade,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo,

 

ich importiere aktuell Inhalte aus CSV-Dateien mit beliebigem Inhalt und beliebig vielen Spalten in ein Word-Dokument. Das klappt soweit gut, aber ich möchte nicht, dass die Spaltennamen alphabetisch sortiert werden sondern so erscheinen, wie sie in der CSV-Datei angeordnet sind. Die Spaltennamen kenne ich zur Laufzeit des Scriptes nicht.

Kann da jemand helfen?

 

Hier der Codeabschnitt:

$path = $GlobalPathCsv + $name + ".csv"
    $defs = Import-CSV $path -Delimiter ';'
    $row = $defs.Count
    $col = ($defs | Get-Member -type NoteProperty).count

    # Tabelle erzeugen
    if($rw -eq 0) {$rw=1}
    $Table = $Selection.Tables.add($Selection.Range,$row+1,$col) 
    
    # Style der Tabelle festlegen
    $Table.Style = "Einfache Tabelle 1"
    $sel = $Table.Range
    $sel.Style = "Standard"
    
    ## Überschriften ausschneiden und in Tabelle eintragen
    $colheads = ($defs | get-member -type NoteProperty)
    
    $i = 1
    ForEach($colhead in $colheads)
    {
        $Table.Cell(1,$i).Range.text = $colhead.Name
        $i++
    }

    ## Inhalte der Spalten/Zeilen auslesen und eintragen
    $i = 0
    $j = 0
    ForEach($def In $defs)
    {
        for ($j=0; $j -le $colheads.Count-1; $j++)
        {
            $Table.Cell($i+2,$j+1).Range.text = $defs[$i].($colheads[$j].Name)
        }
        $i++
    }

Das hier ist die Zeile, in der die Spaltennamen ausgelesen werden. Hier liegt sicher der Hase im Pfeffer:

$colheads = ($defs | get-member -type NoteProperty)

Vielen Dank schon mal!

Geschrieben

Wenn ich mir https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/import-csv?view=powershell-5.1 anschaue, liegt das daran, daß get-member die Member automatisch zuerst nach Member Type sortiert und dann nach Member Name. Das mußt Du anders lösen... Könnte z.B. so gehen:

 

$colheads = $defs.(NameDerNoteproperty)

 

(Hab grad kein CSV zum Importieren da...)

  • Beste Lösung
Geschrieben

Vielen Dank für Deine Antwort. So ähnlich habe ich es jetzt lösen können. Die vollständige Lösung steht hier: https://stackoverflow.com/questions/27361418/how-to-get-powershell-object-properties-in-the-same-order-that-format-list-does

 

So sieht der Abschnitt im Code jetzt aus (die nicht gewollte Lösung mit alphabetischer Sortierung ist auskommentiert).

#$colheads = ($defs | get-member -type NoteProperty)
 $colheads = $defs[0].psobject.Properties | select name
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...