jocheng
Goto Top

XLXS zu CSV + Wert ersetzen - Batch

Hallo Leute ich habe ein Problem

Ich brauch ein kleines Batch Script das ich täglich laufen lassen kann das mir aus einer XLXS Datei eine CSV macht und einen Wert ersetzt

Die Excel Datei ist so aufgebaut
394356010 XL 886060125335 CLASSICSOCKI >50
394356010 M 884803457223 CLASSICSOCKI 42
394356010 L 884664357230 CLASSICSOCKI >50

Neben dem Umwandeln von XLSX muß noch die >50 in 50 umgewandelt werden oder einfach das > gelöscht werden.

Kann mir jemand helfen??? Gerade beim umwandeln habe ich keine Ahnung face-sad

Content-Key: 297331

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

Printed on: April 19, 2024 at 13:04 o'clock

Mitglied: 114757
Solution 114757 Feb 25, 2016 updated at 11:01:47 (UTC)
Goto Top
Moin,
Darfs auch Powershell sein ? Damit ist das schnell erledigt. Mit Batch bräuchtest du nämlich weitere externe Tools.

# Quelldatei
$quelle = 'C:\quelle.xlsx'  
# Zieldatei
$ziel = 'C:\Export.csv'  

# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# Mappe öffnen
$wb = $objExcel.Workbooks.Open($quelle)
# Excel anzeigen
$objExcel.Visible = $true
$objExcel.DisplayAlerts = $false
# In Spalte E alle '>' Zeichen entfernen 
$wb.Sheets.Item(1).Range("E:E").Replace('>','')  
# Datei als CSV speichern
$wb.SaveAs($ziel,6)
$objExcel.DisplayAlerts = $true
# Dokument schließen
$wb.Close($false)
# Excel schließen
$objExcel.Quit()
# Ressourcen freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)

Gruß jodel32
Member: jocheng
jocheng Feb 25, 2016 at 11:06:04 (UTC)
Goto Top
Ich brauche leider ein Batch Script weil darüber nachher dann auch ein import läuft face-sad

Zitat von @114757:

Moin,
Darfs auch Powershell sein ? Damit ist das schnell erledigt. Mit Batch bräuchtest du nämlich weitere externe Tools.

> # Quelldatei
> $quelle = 'C:\quelle.xlsx'  
> # Zieldatei
> $ziel = 'C:\Export.csv'  
> 
> # Excel Objekt
> $objExcel = New-Object -Com Excel.Application
> # Mappe öffnen
> $wb = $objExcel.Workbooks.Open($quelle)
> # Excel anzeigen
> $objExcel.Visible = $true
> $objExcel.DisplayAlerts = $false
> # In Spalte E alle '>' Zeichen entfernen  
> $wb.Sheets.Item(1).Range("E:E").Replace('>','')  
> # Datei als CSV speichern
> $wb.SaveAs($ziel,6)
> $objExcel.DisplayAlerts = $true
> # Dokument schließen
> $wb.Close($false)
> # Excel schließen
> $objExcel.Quit()
> # Ressourcen freigeben
> [System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
> 

Gruß jodel32
Mitglied: 114757
114757 Feb 25, 2016 updated at 11:13:50 (UTC)
Goto Top
Zitat von @jocheng:

Ich brauche leider ein Batch Script weil darüber nachher dann auch ein import läuft face-sad
Dann brauchst du aber externe Tools oder ein integriertes VBS, ohne diese kannst du mit Excel-Files in der Konsole nix anstellen, btw. kannst du das obige auch problemlos mit in eine Batch einbauen face-smile
Member: jocheng
jocheng Feb 25, 2016 at 11:49:06 (UTC)
Goto Top
Wie bekomme ich das in eine Batch???? Eigentlich brauche ich nur das die CSV geschrieben wird mit dem Austausch face-smile

Zitat von @114757:

Zitat von @jocheng:

Ich brauche leider ein Batch Script weil darüber nachher dann auch ein import läuft face-sad
Dann brauchst du aber externe Tools oder ein integriertes VBS, ohne diese kannst du mit Excel-Files in der Konsole nix anstellen, btw. kannst du das obige auch problemlos mit in eine Batch einbauen face-smile
Mitglied: 114757
114757 Feb 25, 2016 updated at 12:08:40 (UTC)
Goto Top
Wie bekomme ich das in eine Batch???? Eigentlich brauche ich nur das die CSV geschrieben wird mit dem Austausch
Du packst das obige Skript in eine *.ps1 Datei und dann schreibst du in die Batch

powershell -Executionpolicy Bypass -File "c:\Pfad\script.ps1"  

Pfade zu den Dateien im obigen PS-Skript natürlich an deine Umgebung anpassen.
Member: jocheng
jocheng Feb 25, 2016 at 16:18:35 (UTC)
Goto Top
muß Excel dafür installiert sein??? Ich bekomme einen Fehler

Zitat von @114757:

Wie bekomme ich das in eine Batch???? Eigentlich brauche ich nur das die CSV geschrieben wird mit dem Austausch
Du packst das obige Skript in eine *.ps1 Datei und dann schreibst du in die Batch

> powershell -Executionpolicy Bypass -File "c:\Pfad\script.ps1"  
> 

Pfade zu den Dateien im obigen PS-Skript natürlich an deine Umgebung anpassen.
Mitglied: 114757
114757 Feb 25, 2016, updated at Feb 26, 2016 at 10:00:38 (UTC)
Goto Top
muß Excel dafür installiert sein??? Ich bekomme einen Fehler
Ja, natürlich face-smile was erwartest du sonst bei den folgenden Zeilen: ???
# Excel Objekt 
$objExcel = New-Object -Com Excel.Application 
Member: jocheng
jocheng Mar 09, 2016 at 17:23:35 (UTC)
Goto Top
manchmal ist man eben einfach dumm :D:D
Member: jocheng
jocheng Apr 07, 2016 at 13:02:36 (UTC)
Goto Top
Ich bräuchte nochmal Hilfe mit dem Script

Leider habe ich jetzt in der Spalte mit den EaN Nummern (886060125335) nicht mehr immer die "richtige Nummer" sondern teilweise ein 00886060125335 stehen. Kann ich die Nummer von hinten nach vorne abschneiden??

Die 00 am Anfang sind das Problem face-sad
Mitglied: 114757
114757 Apr 07, 2016 at 15:13:32 (UTC)
Goto Top
Zitat von @jocheng:
Leider habe ich jetzt in der Spalte mit den EaN Nummern (886060125335) nicht mehr immer die "richtige Nummer" sondern teilweise ein 00886060125335 stehen. Kann ich die Nummer von hinten nach vorne abschneiden??

Die 00 am Anfang sind das Problem face-sad
Null Problem:
# Quelldatei
$quelle = 'C:\quelle.xlsx'  
# Zieldatei
$ziel = 'C:\Export.csv'  

# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# Mappe öffnen
$wb = $objExcel.Workbooks.Open($quelle)
# Excel anzeigen
$objExcel.Visible = $true
$objExcel.DisplayAlerts = $false
# Sheet-Referenz holen
$ws = $wb.Sheets.Item(1)
# In Spalte E alle '>' Zeichen entfernen 
$ws.Range("E:E").Replace('>','')  
# Führende Nullen in der Spalte C entfernen
$ws.Range("C1:C" + $ws.Range("C1").End(-4121).Row) | %{$_.Value() = $_.Value().TrimStart('0')}  

# Datei als CSV speichern
$wb.SaveAs($ziel,6)
$objExcel.DisplayAlerts = $true
# Dokument schließen
$wb.Close($false) | out-null
# Excel schließen
$objExcel.Quit() | out-null
# Ressourcen freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel) | out-null
Member: jocheng
jocheng Apr 07, 2016 at 16:15:54 (UTC)
Goto Top
Du bist genial. Klappt mal wieder super