mayli01
Goto Top

Per Batch eine Spalte in eine CSV Datei einfügen

Hallo Forum face-smile

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

Content-ID: 290123

Url: https://administrator.de/contentid/290123

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

114757
114757 05.12.2015 aktualisiert um 10:05:52 Uhr
Goto Top
Mit Powershell schnell gemacht:
$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
mayli01
mayli01 05.12.2015 um 10:54:08 Uhr
Goto Top
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
114757
114757 05.12.2015 um 11:03:56 Uhr
Goto Top
Den Encoding-Parameter am Ende einfach auf Default stellen.
mayli01
mayli01 05.12.2015 um 11:28:44 Uhr
Goto Top
Vielen Dank!
Jetzt ist es perfekt face-smile

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
114757
114757 05.12.2015 aktualisiert um 11:47:59 Uhr
Goto Top
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  
Schönes Wochenende
jodel32
mayli01
mayli01 05.12.2015 um 13:07:47 Uhr
Goto Top
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
122990
122990 05.12.2015 aktualisiert um 13:36:31 Uhr
Goto Top
Zitat von @mayli01:
Funktioniert einwandfrei bis auf das, dass mir bei den gesamten spalten jetzt die umlaute als ? angezeigt werden.
Moin,
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  
Achtung: den Encoding-Parameter bei Import-CSV gibts erst ab Powershell 3.0
https://technet.microsoft.com/de-de/library/hh849891.aspx

Gruß grexit
mayli01
mayli01 05.12.2015 um 15:15:08 Uhr
Goto Top
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 Hilfeface-smile

LG Alex
114757
114757 05.12.2015 aktualisiert um 17:25:15 Uhr
Goto Top
$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'  
}
$csv | Export-CSV 'c:\Datei-fertig.csv' -NoType -delimiter ';' -Encoding Default  
Jetzt is aber gut ... Die Doku ist dein Freund:

114757
114757 05.12.2015 um 17:25:02 Uhr
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
mayli01
mayli01 05.12.2015 um 17:44:12 Uhr
Goto Top
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:
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'   
$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 face-smile

Lg Alex
114757
Lösung 114757 05.12.2015 aktualisiert um 18:24:20 Uhr
Goto Top
  • 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 !
Geht hier einwandfrei, natürlich nur wenn der Wert nicht leer ist face-wink
Alternativ kann man auch mit
$_.'Neue Spalte' = $_.'ArtNo'.Substring(0,1)
arbeiten.

Und nicht vergessen die neue Spalte auch zu erzeugen face-wink siehe meinen Code..

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'  
}
$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.
mayli01
mayli01 05.12.2015 um 18:19:47 Uhr
Goto Top
Vielen dank noch einmal! face-smile
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
cheffkoch
cheffkoch 08.04.2021 um 16:24:18 Uhr
Goto Top
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!