2016-04-07 7 views
0

Ich mache Datenausgabe in csv-Datei über Powershell. Generell läuft es gut.Excel com-Objekt über Powershell

Ich habe die Daten in CSV-Datei exportiert. Es enthält ungefähr 10 Spalten. Wenn ich es mit MS Excel öffne, ist alles in der ersten Spalte enthalten. Ich möchte es programmtechnisch über mehrere Powershell teilen (gleiche GUI-Version bietet). Ich könnte Schleifen machen und Sachen machen, um jede Zeile aufzuteilen und dann Werte in die entsprechende Zelle zu setzen, aber dann würde es viel zu lange dauern.

Ich glaube, es sollte eine elegante Lösung geben, um eine Spalte auf mehrere zu teilen. Gibt es eine Möglichkeit, es ohne Looping in einem einfachen Schritt zu machen? Diese

ist, was ich kam mit so weit nach oben:

PS, Die CSV-Datei ist 100% FINE. Das Trennzeichen ist ''

Get-Service | Export-Csv -NoTypeInformation c:\1.csv -Encoding UTF8 
$xl = New-Object -comobject Excel.Application 
$xl.Visible = $true 
$xl.DisplayAlerts = $False 
$wb = $xl.Workbooks.Open('c:\1.csv') 
$ws = $wb.Sheets|?{$_.name -eq '1'} 
$ws.Activate() 

$col = $ws.Cells.Item(1,1).EntireColumn 

enter image description here

+0

Ist die Datei aus, als man erwarten würde, wenn man es in einem Texteditor wie Notepad öffnen? (d. h. Komma getrennte Spalten, Zeilen getrennte Zeilen). Nicht sicher, wie die Ausgabe von Datagridviews aussieht, verwende ich eher "Export-Csv", was Excel mag. – gms0ulman

+0

Zeigen Sie uns Ihre CSV-Datei, damit wir sie reproduzieren können ... – Avshalom

+0

Ich habe den ursprünglichen Beitrag aktualisiert. CSV-Datei ist nicht der Grund überhaupt. Es hat die richtige Struktur und alles. Wenn Sie Excel öffnen, müssen Sie eine Option verwenden, um die Spalte nach dem angegebenen Trennzeichen zu teilen. –

Antwort

1

Dies wird Ihnen die gewünschte Funktionalität erhalten; füge deinen Code hinzu. Weitere Informationen zu TextToColumns finden Sie unter the MSDN page.

# Select column 
$columnA = $ws.Range("A1").EntireColumn 

# Enumerations 
$xlDelimited  = 1 
$xlTextQualifier = 1 

# Convert Text To Columns 
$columnA.texttocolumns($ws.Range("A1"),$xlDelimited,$xlTextQualifier,$true,$false,$false,$true,$false) 
$ws.columns.autofit() 

Ich hatte eine CSV zu schaffen, die "","" als Begrenzer hatte dies zu testen. Die Datei mit "," war in Excel in Ordnung.

# Opens with all fields in column A, used to test TextToColumns works 
"Name,""field1"",""field2"",""field3""" 
"Test,""field1"",""field.2[]"",""field3""" 

# Opens fine in Excel 
Name,"field1","field2","field3" 
Test,"field1","field.2[]","field3" 

Haftungsausschluss: Getestet mit $ws = $wb.Worksheets.item(1)

+0

Das ist genau das, was ich gesucht habe. Danke vielmals! –