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

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!

Link zu diesem Kommentar

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...)

Link zu diesem Kommentar
  • Beste 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://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
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...