2017-08-10 3 views
0

Ich habe eine CSV-Datei, die ich herunterziehen und wöchentlich bearbeiten muss. Ein Teil dieser Manipulation füllt leere Zellen mit der richtigen Abteilung und Marke, da sie mit leeren Zellen für übereinstimmende Einträge erzeugt wird.Füllen leerer Zellen in CSV mit Powershell basierend auf Zelle über leere Zelle

Zum Beispiel enthält Zelle B34 den Text "Frozen", während die Zellen B35 bis B40 leer sind. Zelle B41 enthält den Text "Dairy". Ich möchte den Text "Frozen" von Zelle B34 zu Zellen B35 bis B40 mit Powershell kopieren.

Ich habe nach einer Antwort gesucht, aber kein Glück gehabt.

Vielen Dank.

EDIT:

habe ich den Code aus wOxxOm in den wie unten Kommentare.

$csv = import-csv inputfilepath.csv 
$prevRow = $csv[0]; 
foreach ($row in $csv[1..($csv.length-1)]) { 
    if (!$row.subCatDesc) { $row.subCatDesc = $prevRow.subCatDesc }; $prevRow = $row | export-csv outputfilepath.csv 
} 

Dabei ist subCatDesc der Header für die Spalte. Wenn ich dies tue, läuft es gut, aber die Ausgabedatei hat Zelle A1 lesen "#TYPE System.Management.Automation.PSCustomObject", Zeile 2 enthält die gleichen Header wie die Quelldatei, und dann gibt es nur Zeile 3, die das Finale ist Zeile der Quelldatei.

EDIT 2:

Ändern wieder mit TheIncorrigible1 der Eingabe:

$csv = import-csv -Path inputfilepath.csv 
$prevRow = $csv[1]; 
foreach ($row in $csv[2..($csv.length-1)]) { 
    if (!$row.subCatDesc) { $row.subCatDesc = $prevRow.subCatDesc }; $prevRow = $row 
} 
$csv | Export-Csv -Path outputfilepath.csv -NoTypeInformation 

Dies löscht die oben genannten Probleme auf, und tatsächlich die Aufgabe erfolgreich abgeschlossen, mit Ausnahme des ersten Satzes von leeren Zellen (Zellen B3 bis B19 in meiner Test-CSV) bleibt leer und kopiert nicht den Inhalt von B2, was "Käse" ist.

EDIT 3:

Einstellen wieder:

$prevRow = $csv[0] 

und foreach ($ row in $ CSV [1..csv.length-1]) {

wie ursprünglich gegeben durch wOxxOm löst dies. Danke euch allen, es funktioniert jetzt.

+2

Haben Sie es gehen noch gegeben? Postleitzahl, damit wir helfen können. – gms0ulman

+0

Ich habe nicht, weil ich nicht die foggiest, wo ich anfangen soll, und keiner der verwandten Code-Schnipsel, die ich gefunden habe, tun ganz, was ich suche. – BryceJenkins

+0

Etwas wie $ prevRow = $ csv [0]; foreach ($ row in $ csv [1 .. ($ csv.length-1)]) {if (! $ row.b) {$ row.b = $ prevRow.b}; $ prevRow = $ row} – wOxxOm

Antwort

0

auf die obigen Ausführungen hier basiert der resultierende Code, das funktioniert:

$csv = import-csv -Path inputfilepath.csv 
$prevRow = $csv[0]; 
foreach ($row in $csv[1..($csv.length-1)]) { 
    if (!$row.subCatDesc) { $row.subCatDesc = $prevRow.subCatDesc }; $prevRow = $row 
} 
$csv | Export-Csv -Path outputfilepath.csv -NoTypeInformation 
Verwandte Themen