2016-04-07 38 views
0

Veri çıkışı, powershell yoluyla csv dosyasına yapıyorum. Genel olarak işler iyi gider.Excel com-object powershell üzerinden

Verileri csv dosyasına verdim. Yaklaşık 10 sütun içerir. MS Excel ile açtığımda, hepsi ilk sütunda yer alıyor. Ben powershell (aynı GUI sürümü teklifleri) yoluyla programatik olarak birkaç sütun ile bölmek istiyorum. Her sırayı ayırmak için döngü ve şeyler yapabilirim ve sonra değerleri uygun bir hücreye koyardım ama sonra çok fazla zaman alırdı.

Bir sütunu birden çoğuna ayırmak için zarif bir çözüm olması gerektiğine inanıyorum. Döngülemeden basit bir adımda yapmanın bir yolu var mı?

Bu defa ile geldi budur:

PS, CSV dosyası% 100 İNCE olduğunu. sınırlayıcı '' olduğunu

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

ile test edilmiştir? (yani virgülle ayrılmış sütunlar, satırlar ayrılmış satırlar). Hangi datagridviews çıktısının nasıl göründüğünden emin değilim, Excel'in beğendiği 'Export-Csv'yi kullanma eğilimindeyim. – gms0ulman

+0

bize csv dosyanızı göstererek çoğaltabiliriz ... – Avshalom

+0

Orijinal gönderiyi güncelledim. CSV dosyası hiç de sebep değil. Doğru yapıya ve her şeye sahiptir. Sadece excel'i açtığınızda, belirtilen sınırlayıcıyla sütunu ayırmak için bir seçenek kullanmanız gerekir. –

cevap

1

Bu, istenen işleve sahip olurlar; koduna ekle. TextToColumns hakkında daha fazla bilgi için the MSDN page'a bakın.

# 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() 

Bunu test etmek ayırıcı olarak "","" vardı CSV oluşturmak zorunda kaldı. "," ile dosya excel içinde iyiydi.

# 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" 

Yasal Uyarı: Eğer not defteri gibi bir metin editörü açtığınızda senin kadar dosya bakmak beklenebilir mi $ws = $wb.Worksheets.item(1)

+0

Bu, tam olarak ne aradığım. Çok teşekkürler! –