/ / Was ist der Unterschied zwischen CSV und XLSX - Excel, Powershell, CSV

Was ist der Unterschied zwischen CSV und XLSX - Excel, Powershell, CSV

Ich versuche ein paar Listen in einer Ausgabe mit einemExcel-Tabelle, aber die Leute sagen "Dies ist bei CSV nicht dasselbe, da jede Zeile ein einzelnes Objekt ist", "Verwenden Sie Listen, um die gewünschte Ausgabe zu erhalten", und dies erschwert die Situation, weil ich nicht weiß, was jetzt zu tun ist Ich verwende PowerShell. Kann mir jemand den Unterschied mit XLSX- und CSV-Dienstprogrammen beim Import mit einem Beispiel erklären, wenn möglich? Ich habe mir einige Dokumentationen angesehen, aber das hat mir nicht geholfen zu verstehen.

$csv = Import-Csv .test1.csv -Delimiter ";"

$ref = @($csv.Column1)
foreach ($row in $csv) {
foreach ($col in "Column2", "Column3", "Column4") {
if ($ref -contains $row.$col) { $row.$col = "" }
}
}

$csv | Select-Object Column1,Column2,Column3,Column4 | where Column1 -ne ""
$csv | Select-Object Column1,Column2,Column3,Column4 | where Column2 -ne ""

die erwartete Ausgabe

Spalte1 Spalte2 Spalte3 Spalte4 -------------- ------- ------- Infra-98 Infra-852 Infra-44 Infra-99 Infra-62 Infra-85 Infra-8 Infra-23 Infra-8 Infra-852 Infra-10 infra-55 infra-70   Spalte1 Spalte2 Spalte3 Spalte4 ------- ------- ------- ------- Infra-1 Infra-85 Infra-2 Infra-99 Infra-98 Infra-55 Infra-44 Infra-23 Infra-2 Infra-1 Infra-10 Infra-62 Infra-70

Antworten:

1 für die Antwort № 1

Der Kontext geht aus den vorherigen Fragen verloren, wenn Sie eine CSV-Datei mithilfe von importieren Import-CSV Cmdlet. Dann wird jede CSV-Zeile zu einem PowerShell-Objekt. Das Gleiche gilt, wenn Sie eine XLSX mit dem importieren ImportExcel Modul. Die Struktur stimmt nicht mehr mit einer CSV-Datei oder einer XLSX-Datei überein. Es ist keine Tabelle mehr, sondern eine Sammlung von Objekten.

Nehmen Sie die einfache CSV-Datei

Col1,Col2
a,b
c,a

Wenn Sie dies mit importieren sollten Import-CSV PowerShell, dann erhalten Sie ein Array von zwei Objekten. Was könnte besser so dargestellt werden:

@(
[pscustomobject]@{
Col1 = "a"
Col2 = "b"
}
[pscustomobject]@{
Col1 = "c"
Col2 = "a"
}
)

Es handelt sich also um zwei separate Objekte mit Eigenschaften aus den Spaltenüberschriften.

Wenn Sie eine Eigenschaft in einem dieser Objekte auf eine leere Zeichenfolge festlegen, müssen Sie beim Exportieren die Objekte wieder in Zeilen umwandeln. Sie haben eine leere "Zelle".

Um dies zu umgehen, lesen Sie Ihre SpaltenFühren Sie dann als individuelle Arrays die Vergleichslogik für diese Arrays aus, erstellen Sie dann eine vollständig neue Objektkollektion aus diesen aktualisierten Arrays und exportieren Sie sie anschließend. Welche anderen Personen haben in Ihren anderen Fragen geantwortet.