mrvfbnummer2
Goto Top

CSV-Datei nach Excel importieren

Hallo Leute,
ich möchte CSV-Dateien in eine Excel-Datei mit PowerSell importieren. Ich habe bereits viel ausprobiert aber habe noch 2 Probleme:
1. Die Excel-Datei ist nicht leer. Es steht also schon was in ihr drin. Wie bekomme ich es hin, dass ich die bestehende Datei nicht überschreibe, sondern die CSV-Datei quasi "unten dran hänge"?
2. Die CSV-Datei hat andere Überschriften für die Spalten als die Excel-Datei. Wie bekomme ich es hin, dass nur die Spalten aus der CSV in die Excel importiert werden, die auch als Überschrift in der Excel-Datei enthalten sind?

Bin dankbar für Antworten.

Liebe Grüße

Content-Key: 316437

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

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: YotYot
YotYot 28.09.2016 um 16:53:30 Uhr
Goto Top
Mit Powershell in Excel importieren? D.h., Du bedienst Excel und seine Funktionen mit Powershell? An dem Punkt Powershell für dieses Problem kann ich Dir nicht helfen, allerdings sehe ich das so, dass der Import selbst schon eine drei-Schritte-Nummer wird:

1. csv in ein neues Tabellenblatt importieren
2. Daten formatieren (Überschriften, Spalten)
3. Daten unter die Haupttabelle kopieren.

Ich würde das dann mit VBA machen. Aber mit Powershell? Wenn das geht, will ich das auch wissen! face-smile
Mitglied: Kraemer
Kraemer 28.09.2016 aktualisiert um 21:37:01 Uhr
Goto Top
Moin,

deine Aufgabe besteht aus mehreren Teilaufgaben, die du erst einmal definieren musst.

Dazu:
- nimm Excel daher und überlege dir, wie du damit in ein vorhandenes Tabellenblatt weitere Daten importieren kannst. Tipp: "Daten"
- mache dich schlau, wie die Powershell CSV-Dateien handhaben kann. GidF
- mache dich schlau, wie man mit der Powershell Excel "fernsteuern" kann. GidF

Wenn du diese Punkt "erforscht" hast, kannst du dich mal an einen Versuch machen, das Ganze umzusetzen. Bei Problemen helfe ich dann gerne weiter.

Gruß Krämer

PS: Alternativer Lösungsansatz: Lade die CSV mit der Powershell und übertrage die Werte direkt nach Excel. Ist der bessere Weg - nur nicht gleich so leicht zu durchschauen wie obiger "zu Fuß"-Ansatz
Mitglied: 131026
131026 28.09.2016 aktualisiert um 23:17:40 Uhr
Goto Top
Hi,
ich möchte CSV-Dateien in eine Excel-Datei mit PowerSell importieren.
Powerseller findest du bei eBay face-smile

Schau mal hier
Powershell für excel
Das sollte dich zumindest schon mal ein gutes Stück nach vorne bringen.

Alles was man mit VBA machen kann geht auch mit Powershell.

Also mit Import-CSV die CSV in die Powershell laden, dann mit Range("1:1").Find('Spaltenname') und einer Schleife alle Spaltennamen der CSV durchlaufen und dann die passende Spalte in ein zweidimensionales Array umwandeln und ins Ziel schreiben.

R.
Mitglied: Pjordorf
Pjordorf 29.09.2016 um 00:39:31 Uhr
Goto Top
Hallo,

Zitat von @mrvfbnummer2:
ich möchte CSV-Dateien in eine Excel-Datei mit PowerSell importieren
http://sqlmag.com/powershell/update-excel-spreadsheets-powershell
http://michlstechblog.info/blog/powershell-control-excel-remotely/

Ich habe bereits viel ausprobiert aber habe noch 2 Probleme:
Warum nicht per VBA? Makrorecorder in Excel hilft da auch weiter...

Gruß,
Peter
Mitglied: colinardo
colinardo 29.09.2016 aktualisiert um 10:32:49 Uhr
Goto Top
Servus zusammen,
Powershell und Excel, ich sags ja immer wieder, ist einfach grotten Lahm, da der Zugriff auf die COM-Objekt-Eigenschaften sehr langsam ist. Wenn COM-Automation mit Excel dann via VBA oder mit einer nativen App.

Der Vollständigkeit halber hier der Code für die Umsetzung in Powershell (aber nicht über die Geschwindigkeit wundern, btw wenn man das ganze in einer 32-Bit PS-Konsole ausführt ist es etwas schneller, aber immer noch nicht viel mehr). Zur Demo was passiert ist Excel sichtbar geschaltet, das lässt sich aber im Code anpassen.
# Quelldateien
$quelle = 'C:\csv-test'  
# Zieldatei
$ziel = "C:\csv-test\daten.xlsx"  
# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# Mappe öffnen
$wb = $objExcel.Workbooks.Open($ziel)
# Erstes Sheet für den Import benutzen
$ws = $wb.Sheets.Item(1)
# Excel anzeigen
$objExcel.Visible = $true
# Meldungen abschalten
$objExcel.DisplayAlerts = $false

$nextfreerow = $ws.Cells.Item($ws.Rows.Count,"A").End(-4162).Row + 1  
# Ale CSV-Dateien des Ordners importieren
gci $quelle -Filter *.csv -File | %{
    $csv = Import-CSV $_.Fullname -Delimiter ";" -Encoding Default  
    # Alle Spalten der CSV im Sheet Zeile 1 suchen
    $csv | gm -MemberType NoteProperty | select -Expand Name | %{
        $colname = $_
        $col = $ws.Range("1:1").Find($_)  
        if ($col){
            $arrCol = New-Object 'object[,]' $csv.$colname.Count,1  
            0..($csv.$colname.Count - 1) | %{
                $arrCol[$_,0] = $csv.$colname[$_]
            }
            $ws.Cells.Item($nextfreerow,$col.Column).Resize($csv.$colname.Count,1).Value() = $arrCol
        }
    }
    $nextfreerow += $csv.Count
}
$objExcel.DisplayAlerts = $true
# Datei speichern
$wb.Save()
# Dokument schließen
$wb.Close($false)
# Excel schließen
$objExcel.Quit()
# Ressourcen freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel) | out-null
Die Zusammenfassung der Daten komplett in der Powershell wäre sinngemäßer, Routinen für die CSV-Verarbeitung gibt es dort genügend. Oder als VBA-Makro in der Arbeitsmappe selber.
Dafür findest du hier genügend VBA Beispiele von mir, einfach die Suche an werfen. Ausrede gilt nicht!

Grüße Uwe