Zum Inhalt wechseln


Foto

Powershell - Import-CSV ohne Spaltensortierung


  • Bitte melde dich an um zu Antworten
2 Antworten in diesem Thema

#1 cascade

cascade

    Newbie

  • 28 Beiträge

 

Geschrieben 13. September 2017 - 13:29

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!



#2 daabm

daabm

    Expert Member

  • 2.111 Beiträge

 

Geschrieben 13. September 2017 - 20:04

Wenn ich mir https://docs.microso...=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...)


Greetings/Grüße, Martin

Mal ein gutes Buch über GPOs lesen? Oder ein kleines, aber feines Blog darüber?

Und wenn mir die IT mal auf die Nerven geht - coke bottle design refreshment (-:


#3 cascade

cascade

    Newbie

  • 28 Beiträge

 

Geschrieben 14. September 2017 - 06:14   Lösung

Vielen Dank für Deine Antwort. So ähnlich habe ich es jetzt lösen können. Die vollständige Lösung steht hier: https://stackoverflo...ormat-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