Per Batch eine Spalte in eine CSV Datei einfügen
Hallo Forum 
Folgende Ausgangssituation.
Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 000 Zeilen wo die Artikel gelistet sind.
Nun möchte ich eine 10. Spalte am ende hinzufügen mit einer Kopfzeile ( zb. "Lagerbestand beachten") und bis am ende ca. 50 000 zielen den Buchstaben "Y" stehen haben.
Das ganze brauche ich für einen Lagerbestand Import.
Da die CSV ständig Aktualisiert wird wollte ich fragen ob es eine Möglichkeit gibt das ganze per Batch oder VBS zu realisieren.
Ähnliche Skripte hab ich schon gefunden nur leider nicht das was ich möchte.
Danke im voraus.
Lg Alex
Folgende Ausgangssituation.
Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 000 Zeilen wo die Artikel gelistet sind.
Nun möchte ich eine 10. Spalte am ende hinzufügen mit einer Kopfzeile ( zb. "Lagerbestand beachten") und bis am ende ca. 50 000 zielen den Buchstaben "Y" stehen haben.
Das ganze brauche ich für einen Lagerbestand Import.
Da die CSV ständig Aktualisiert wird wollte ich fragen ob es eine Möglichkeit gibt das ganze per Batch oder VBS zu realisieren.
Ähnliche Skripte hab ich schon gefunden nur leider nicht das was ich möchte.
Danke im voraus.
Lg Alex
14 Antworten
- LÖSUNG 114757 schreibt am 05.12.2015 um 10:05:12 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 10:54:08 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 11:03:56 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 11:28:44 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 11:45:08 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 13:07:47 Uhr
- LÖSUNG 122990 schreibt am 05.12.2015 um 13:28:37 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 15:15:08 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 15:32:38 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 17:25:02 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 17:44:12 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 17:58:39 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 18:19:47 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 17:58:39 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 17:44:12 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 17:25:02 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 15:32:38 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 15:15:08 Uhr
- LÖSUNG 122990 schreibt am 05.12.2015 um 13:28:37 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 13:07:47 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 11:45:08 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 11:28:44 Uhr
- LÖSUNG 114757 schreibt am 05.12.2015 um 11:03:56 Uhr
- LÖSUNG cheffkoch schreibt am 08.04.2021 um 16:24:18 Uhr
- LÖSUNG mayli01 schreibt am 05.12.2015 um 10:54:08 Uhr
LÖSUNG 05.12.2015, aktualisiert um 10:05 Uhr
Mit Powershell schnell gemacht:
Gruß jodel32
$csv = Import-CSV 'c:\Datei.csv' -delimiter ';'
$csv | add-member -MemberType NoteProperty -Name 'Lagerstand beachten' -Value 'Y' -Force
$csv | Export-CSV 'c:\Datei-fertig.csv' -NoType -delimiter ';' -Encoding UTF8
Gruß jodel32
LÖSUNG 05.12.2015 um 10:54 Uhr
Danke für die schnelle Antwort!
Hat soweit super Geklappt ;)
Kann ich das ganze auch in wieder in eine ISO-8859-1 ausgeben?
Standardmäßig bekomme ich die von meinem Händler so.
Lg Alex
Hat soweit super Geklappt ;)
Kann ich das ganze auch in wieder in eine ISO-8859-1 ausgeben?
Standardmäßig bekomme ich die von meinem Händler so.
Lg Alex
LÖSUNG 05.12.2015 um 11:03 Uhr
Den Encoding-Parameter am Ende einfach auf Default stellen.
LÖSUNG 05.12.2015 um 11:28 Uhr
Vielen Dank!
Jetzt ist es perfekt
Eine frage hätte ich noch....
Läst sich da auch was mit einer Formel machen?
Zb. habe ich 3 Spalten mit Artikeldaten die ich mit einer "&" Formel in einer spalte zusammenfügen möchte.
Dazwischen sollte noch ein Lehrzeichen sein.
In OpenOffice würde das so aussehen: =B2&" "&C2&" "&D2
Es ist natürlich eine Kopfzeile enthalte wo diese Formel nicht angewendet werden soll.
Ich wäre dir sehr dankbar wenn du mir da auch noch weiterhelfen könntest.
LG Alex
Jetzt ist es perfekt
Eine frage hätte ich noch....
Läst sich da auch was mit einer Formel machen?
Zb. habe ich 3 Spalten mit Artikeldaten die ich mit einer "&" Formel in einer spalte zusammenfügen möchte.
Dazwischen sollte noch ein Lehrzeichen sein.
In OpenOffice würde das so aussehen: =B2&" "&C2&" "&D2
Es ist natürlich eine Kopfzeile enthalte wo diese Formel nicht angewendet werden soll.
Ich wäre dir sehr dankbar wenn du mir da auch noch weiterhelfen könntest.
LG Alex
LÖSUNG 05.12.2015, aktualisiert um 11:47 Uhr
Läst sich da auch was mit einer Formel machen?
Klar, für Powershell null Problemo, damit geht alles:NameDerSpalte ersetzt du durch den Namen der Zusammenfassungsspalte und die anderen Namen der Spalten in Zeile 3 des Codes ersetzt du ebenfalls durch Ihre richtigen Namen
$csv = Import-CSV 'c:\Datei.csv' -delimiter ';'
$csv | add-member -MemberType NoteProperty -Name 'Lagerstand beachten' -Value 'Y' -Force
$csv | %{$_.'NameDerSpalte' = $_.'Spalte2' + " " + $_.'Spalte3' + " " + $_.'Spalte4'}
$csv | Export-CSV 'c:\Datei-fertig.csv' -NoType -delimiter ';' -Encoding Default
jodel32
LÖSUNG 05.12.2015 um 13:07 Uhr
Ein Großes THX!
Funktioniert einwandfrei bis auf das, dass mir bei den gesamten spalten jetzt die umlaute als ? angezeigt werden.
Hab schon sämtliche Einstellungen durchprobiert aber ohne erfolg...
Erbanfalls schönes Wochenende
Lg Alex
Funktioniert einwandfrei bis auf das, dass mir bei den gesamten spalten jetzt die umlaute als ? angezeigt werden.
Hab schon sämtliche Einstellungen durchprobiert aber ohne erfolg...
Erbanfalls schönes Wochenende
Lg Alex
LÖSUNG 05.12.2015, aktualisiert um 13:36 Uhr
Zitat von @mayli01:
Funktioniert einwandfrei bis auf das, dass mir bei den gesamten spalten jetzt die umlaute als ? angezeigt werden.
Moin,Funktioniert einwandfrei bis auf das, dass mir bei den gesamten spalten jetzt die umlaute als ? angezeigt werden.
dann stimmt dein Encoding entweder beim Einlesen oder beim Ausgeben nicht, am Ende von Import-CSV noch ein "Default" dran machen oder dein benutztes Encoding angeben, sollte helfen
Mögliche Werte: Unicode | UTF7 | UTF8 | ASCII | UTF32 | BigEndianUnicode | Default | OEM
$csv = Import-CSV 'c:\Datei.csv' -delimiter ';' -Encoding Default
https://technet.microsoft.com/de-de/library/hh849891.aspx
Gruß grexit
LÖSUNG 05.12.2015 um 15:15 Uhr
Danke!
Jetzt klappt das auch ;)
So... jetzt habe ich noch was... ich weiß, schön langsam werde ich lästig :D
In meiner csv habe ich eine Spalte mit Artikelnummern die natürlich wieder eine Kopfzeile enthält. Artikelnummern sehen zb. so aus: NMZEBB
Gibt es da eine Möglichkeit nur den ersten Buchstaben der Artikelnummern, in diesem Fall das "N" in eine neue spalte zu schreiben?
Ich brauche den Anfangsbuchstaben dann später für eine weitere Formel.
Fielen Dank für eure tolle Hilfe
LG Alex
Jetzt klappt das auch ;)
So... jetzt habe ich noch was... ich weiß, schön langsam werde ich lästig :D
In meiner csv habe ich eine Spalte mit Artikelnummern die natürlich wieder eine Kopfzeile enthält. Artikelnummern sehen zb. so aus: NMZEBB
Gibt es da eine Möglichkeit nur den ersten Buchstaben der Artikelnummern, in diesem Fall das "N" in eine neue spalte zu schreiben?
Ich brauche den Anfangsbuchstaben dann später für eine weitere Formel.
Fielen Dank für eure tolle Hilfe
LG Alex
LÖSUNG 05.12.2015, aktualisiert um 17:25 Uhr
$csv = Import-CSV 'c:\Datei.csv' -delimiter ';' -Encoding Default
$csv | add-member -MemberType NoteProperty -Name 'Lagerstand beachten' -Value 'Y' -Force
$csv | add-member -MemberType NoteProperty -Name 'Neue Spalte' -Value '' -Force
$csv | %{
$_.'NameDerSpalte' = $_.'Spalte2' + " " + $_.'Spalte3' + " " + $_.'Spalte4'
$_.'Neue Spalte' = $_.'Artikelnummer'[0]
}
$csv | Export-CSV 'c:\Datei-fertig.csv' -NoType -delimiter ';' -Encoding Default
- http://www.powershellpraxis.de/
- http://www.msxfaq.de/code/powershell/powershell.htm
- https://www.administrator.de/wissen/powershell-for-runaways-part-i-76114 ...
- https://www.administrator.de/wissen/powershell-for-runaways-part-ii-8661 ...
- http://powershell.com/cs/
- http://powershell.com/cs/media/13/default.aspx
LÖSUNG 05.12.2015 um 17:25 Uhr
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
LÖSUNG 05.12.2015 um 17:44 Uhr
Sorry, aber mit dieser Materie kenne ich mich so gut wie gar nicht aus...
Ein kleines Problem habe ich leider noch...
Bei der letzten Aufgabe wo ich die Artikelnummern in einer Spalte nur den Ersten Buchstaben einer Artikelnummer in einer neuen spalte haben möchte funktioniert leider nicht.
Ausgabe:
Mein Aktueller Code schaut so aus:
Vielleicht kann sich noch einmal jemand die mühe machen und mir da noch einmal weiterhelfen...
Dann wäre auch alles gelöst
Lg Alex
Ein kleines Problem habe ich leider noch...
Bei der letzten Aufgabe wo ich die Artikelnummern in einer Spalte nur den Ersten Buchstaben einer Artikelnummer in einer neuen spalte haben möchte funktioniert leider nicht.
Ausgabe:
Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
In Z:\auto_download_list\spalte_Artikelname_NEU_in_wave_list_hinzufügen.ps1:5 Zeichen:1
+ $_.'Neue Spalte' = $_.'ArtNo'[1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
Mein Aktueller Code schaut so aus:
$csv = Import-CSV 'Z:\auto_download_list\wave_list.csv' -delimiter `t -Encoding Default
$csv | add-member -MemberType NoteProperty -Name 'Neuer_Artikelname' -Value '' -Force
$csv | %{$_.'Neuer_Artikelname' = $_.'Manufacturer' + " " + $_.'Name' + " " + $_.'Addition'}
$_.'Neue Spalte' = $_.'ArtNo'[0]
$csv | Export-CSV 'Z:\auto_download_list\wave_list_mit_lehrer_spalte_Artikelname_NEU.csv' -NoType -delimiter ';' -Encoding Default
Vielleicht kann sich noch einmal jemand die mühe machen und mir da noch einmal weiterhelfen...
Dann wäre auch alles gelöst
Lg Alex
LÖSUNG 05.12.2015, aktualisiert um 18:24 Uhr
- Schau dir mal meinen Code doch nochmal genau an ... der stimmt so nicht, vor allem die Klammersetzung !
- Zeile 4 ist außerhalb der For-Schleife, das kann so natürlich nicht funktionieren.
- der erste Buchstabe ist immer der Index 0 !
Alternativ kann man auch mit
$_.'Neue Spalte' = $_.'ArtNo'.Substring(0,1)
Und nicht vergessen die neue Spalte auch zu erzeugen
also:
$csv = Import-CSV 'Z:\auto_download_list\wave_list.csv' -delimiter `t -Encoding Default
$csv | add-member -MemberType NoteProperty -Name 'Neuer_Artikelname' -Value '' -Force
$csv | add-member -MemberType NoteProperty -Name 'Neue Spalte' -Value '' -Force
$csv | %{
$_.'Neuer_Artikelname' = $_.'Manufacturer' + " " + $_.'Name' + " " + $_.'Addition'
$_.'Neue Spalte' = $_.'ArtNo'[0]
}
$csv | Export-CSV 'Z:\auto_download_list\wave_list_mit_lehrer_spalte_Artikelname_NEU.csv' -NoType -delimiter ';' -Encoding Default
Sorry, aber mit dieser Materie kenne ich mich so gut wie gar nicht aus...
Dafür habe ich dir ja die Lernen-Links gepostet, wenn du mehr damit machen willst.LÖSUNG 05.12.2015 um 18:19 Uhr
Vielen dank noch einmal! 
Jetzt funktioniert es genau so wie ich es haben möchte. ;)
Hatte vergessen eine neue Spalte dafür zu erzeugen...
Das wäre übrigens meine Version:
Danke an alle für eure Hilfe!
Hat mich sehr weiter gebracht ;)
Lg Alex
Jetzt funktioniert es genau so wie ich es haben möchte. ;)
Hatte vergessen eine neue Spalte dafür zu erzeugen...
Das wäre übrigens meine Version:
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.17400
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
Danke an alle für eure Hilfe!
Hat mich sehr weiter gebracht ;)
Lg Alex
LÖSUNG 08.04.2021 um 16:24 Uhr
Wenn ich die csv um eine Spalte ergänzen möchte, die mir aus meinem Active Directory z.B. die Kostenstelle anhand der Mail aus Spalte B vergleicht und ausgibt, wie würde ich das schreiben?
Danke für die Hilfe!
Danke für die Hilfe!