crank69
Goto Top

Powershell für excel

Hallo ich benötige hilfe bei Powershell leider bin ich noch neu im Programmieren und würde mich freuen wenn ihr mir helfen könnt.

Ich habe 4 Dateitypen von .csv und wollte fragen ob ihr mir helfen könnt es in eine Umzuwandeln. In dem Script was ich angefangen habe öffnen sich leider alle 4 einzeln und wäre schön wenn es eine Datei wird. Ich weiß leider nicht wie man es Importieren kann das es nur noch eine ist wäre super wenn ihr mir helfen könntet.

$Excel = New-Object -Comobject Excel.Application
$Excel.Visible = $true

$Filepath = "D:\s1.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)

$Filepath = "D:\s2.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)

$Filepath = "D:\s3.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)

$Filepath = "D:\s4.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)


danke für eure zeit

Content-Key: 311745

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

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: 129813
129813 04.08.2016 aktualisiert um 14:37:24 Uhr
Goto Top
This should be a "question" rather then a knowledge thread ?!
$merged = @()
gci "D:\s*.csv" | %{$merged +=(Import-Csv $_.Fullname -delimiter ";")}  
$merged | export-csv "D:\result.csv" -delimiter ";" -NoTypeInformation -Encoding UTF8  
Regards
Mitglied: Crank69
Crank69 04.08.2016 um 14:33:19 Uhr
Goto Top
danke für die Hilfe aber wenn ich den Skript benutze wird nur eine kleine Excel Datei neu gemacht, aber es sind keine der 4 Datei davon drin. Habe ich was falsch kopiert oder falsch zum script hinzugefügt.

mfg
Mitglied: 129813
129813 04.08.2016 aktualisiert um 14:38:32 Uhr
Goto Top
The above works, tested it. You need to edit the used delimiter in your CSV files.
Mitglied: Crank69
Crank69 04.08.2016 um 14:41:26 Uhr
Goto Top
Sry das ist mir gerade zu hoch. Wie sollte den das script aussehen.


$Excel = New-Object -Comobject Excel.Application
$Excel.Visible = $true

$Filepath = "D:\s1.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)

$Filepath = "D:\s2.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)

$Filepath = "D:\s3.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)

$Filepath = "D:\s4.csv"
$Workbook = $Excel.Workbooks.Open($Filepath)


$merged = @()

gci "D:\s*.csv" | %{$merged +=(Import-Csv $_.Fullname -delimiter ";")}

$merged | export-csv "D:\result.csv" -delimiter ";" -NoTypeInformation -Encoding UTF8

Damit es funktioniert bei mir geht nix
Mitglied: 129813
129813 04.08.2016 aktualisiert um 14:45:12 Uhr
Goto Top
No, only my script !! No combination!

Like I said modify the delimiter which is used in your CSV files in my script above...
-delimiter ";"
Or
-delimiter ","

You don't need Excel to combine CSV Files !! This can be done directly with plain powershell
Mitglied: Crank69
Crank69 04.08.2016 um 14:52:10 Uhr
Goto Top
danke die Dateien sind jetzt komplett, aber wollte das die 4 Daten in 4 Tabellenblatt aufgeteilt sind.
Trotzdem schon mal danke
Mitglied: Pjordorf
Pjordorf 04.08.2016 um 16:35:22 Uhr
Goto Top
Hallo,

Zitat von @Crank69:
aber wollte das die 4 Daten in 4 Tabellenblatt aufgeteilt sind.
Ist dir schon aufgefallen das wenn du in einer Kneipe ein Bier bestellst das du keine Pizza bekommst? Du hast genau bekommen wonach du verlangt hast. Aber nur zur klarstellung:
CSV steht für Comma Seperated Value und sonst nichts. Das mittels Excel eine CSV datei mit irgendwelchen Inhalten (aber keine Exceldaten) durch doppelklick geöffnet werden kann ist zwar schön, aber es bleiben trotzdem nur Komma getrennte Werte. Eine richtige Exceldatei beihaltet neben den Werten hauptsächlich nor vieles anderes damit ein tabellenblatt als Tabellenblatt und nicht als Word Dokument dargestellt werden kann. Von den Excel internas wie Formeln, Formatierungen usw. mal gar nicht zu reden. Folglich kannst du keine CSV datei bauen welche Tabellenblätter enthalten. Die Tabellenblätter ziegt dir erst Excel an und notfalls werden die auch gespeichert - das ist dann eine .xls oder .xla oder .xlsx usw. - aber keine CSV mehr. Ein Editor der tatsächlich dir zeigen kann was dort drin steht zeugt es dir. Ein Notepad kann das schon, Wordpad ebenso wie ein Hex Editor....

Ob du per Powershell aus 4 einzelne CSV Dateien eine Excel Datei mit 4 Arbeitsblätter machen kannst - k.a. Ansonsten den Macrorekorder deines Excel nutzen und dir aufzeichnen lassen was passiert wenn du es händisch machst. Raus kommt VBA Code http://www.online-excel.de/excel/singsel_vba.php?f=84

Gruß,
Peter
Mitglied: colinardo
Lösung colinardo 04.08.2016 aktualisiert um 17:40:31 Uhr
Goto Top
Hallo Marcus86,
Zitat von @Crank69:
danke die Dateien sind jetzt komplett, aber wollte das die 4 Daten in 4 Tabellenblatt aufgeteilt sind.
Warum schreibst du das dann nicht gleich in deinen Thread und lässt die User hier auflaufen??

Ich geh mal von CSV-Dateien im ANSI-Format und Semikolon(;) als Delimiter aus...
# Quelldateien
$quelle = 'D:\s[1-2].csv'  
# Zieldatei
$ziel = "D:\workbook.xlsx"  
# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# platzhalter für leere Parameter
$n = [System.Reflection.Missing]::Value
# Neue Mappe öffnen
$wb = $objExcel.Workbooks.Add()
# Excel anzeigen
$objExcel.Visible = $true
# Meldungen abschalten
$objExcel.DisplayAlerts = $false
# Ale CSV-Dateien des Ordners in ein neue Sheets importieren
gci $quelle | ?{!$_.PSIsContainer} | %{
    # neues Sheet am Ende hinzufügen
    $ws = $wb.Worksheets.Add($n,$wb.Worksheets.Item($wb.Worksheets.Count),$n,$n)
    # Sheet nach dem Namen der Datei benennen
    $ws.Name = $_.Name
    # CSV per Querytable importieren
    $qt = $ws.QueryTables.Add("TEXT;$($_.Fullname)",$ws.Range("A1"))  
    $qt.Name = "Import"  
    $qt.FieldNames = $true
    $qt.AdjustColumnWidth = $true
    $qt.TextFilePlatform = 1252
    $qt.TextFileStartRow = 1
    $qt.TextFileParseType = 1
    $qt.TextFileSemicolonDelimiter = $true
    $qt.Refresh($false)
    # Datenverbindung löschen
    $qt.Delete()
}
$objExcel.DisplayAlerts = $true
# Datei speichern
$wb.SaveAs($ziel)
# Dokument schließen
$wb.Close($false)
# Excel schließen
$objExcel.Quit()
# Ressourcen freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
Für die Zukunft, formuliere dein Vorhaben "präzise", das sollte man als angehender Entwickler immer beherzigen wenn man hier passenden Code erwartet. Merci!

Grüße Uwe
Mitglied: Crank69
Crank69 05.08.2016 um 08:22:57 Uhr
Goto Top
Vielen lieben dank wir die Hilfe dann werde ich mal schauen das ich nächstes mal es besser hinkriege zu beschreiben oder lade Fotos hört wie ich es mir am besten vorstellen will.

Danke auch für die zeit dann werde ich es mal probieren und schauen wo ich vielleicht was ändern muss, weil 1 zu 1 wird es bestimmt nicht gehen face-smile

grüße