blueeyephoenix
Goto Top

PowerShell Workbook Columns als Text importieren

Hallo Community,

ich habe da mal eine Frage zum Powershell Import von Excel. Ich versuche eine txt datei zu Importieren und zu bearbeiten mein Problem dabei ist, dass die Dateien die Spalten zur Zahl umformatiert.

Hier mal ein Beispiel:
Das steht in der txt.

Nummer Feld
111.5055 ok
1582.100 ok
1355-125 ok
112.5012 ok

sobald ich es über versuche:
$xlCSV = 6 
$Excel = New-Object -Com Excel.Application  
$Excel.visible = $true
$Excel.displayalerts=$true

$WorkBook = $Excel.Workbooks.Open("mein.txt")  
$sheet = $WorkBook.WorkSheets(1)
$sheet.Columns.item("A:A").NumberFormat = "@"  

entfernt er mir meine Punkte und ändert es in eine Zahl ab und im Nachgang in einen Text. Gibt es einen Befehl damit er mir die Felder im Vorfeld als Text definiert, sodass mein Wert nicht geändert wird?

eine Hilfestellung wäre super, schonmal vielen Dank im Voraus.

Content-ID: 1074605395

Url: https://administrator.de/forum/powershell-workbook-columns-als-text-importieren-1074605395.html

Ausgedruckt am: 22.12.2024 um 07:12 Uhr

colinardo
Lösung colinardo 22.07.2021 aktualisiert um 12:16:37 Uhr
Goto Top
Servus,
importiere über eine Query-Table, da kannst du die Datentypen gleich vorher mittels einem Array festlegen.
$objExcel = New-Object -Com Excel.Application -Property @{Visible = $true}
$wb = $objExcel.Workbooks.Add()
$ws = $wb.Sheets.Item(1)
$csv = 'D:\meine.txt'
$qt = $ws.QueryTables.Add("TEXT;$csv",$ws.Range("A1"))
$qt.TextFileColumnDataTypes = (2,2)
$qt.TextFileSpaceDelimiter = $true
$qt.Refresh($false)
$qt.Delete()
Je nachdem wie deine Spalten getrennt sind musst du das TextFileSpaceDelimiter z.B. durch TextFileSemicolonDelimiter ersetzen wenn die Spalten mit Semikolon getrennt sind. Weitere Typen und alle Optionen für eine Querytable kannst du hier nachlesen
https://docs.microsoft.com/de-de/office/vba/api/excel.querytable

Die Datentypen für die Property TextFileColumnDataTypes sind hier definiert
https://docs.microsoft.com/de-de/office/vba/api/excel.xlcolumndatatype
Name 	Wert 	Beschreibung
xlDMYFormat 	4 	TMJ-Datumsformat
xlDYMFormat 	7 	TJM-Datumsformat
xlEMDFormat 	10 	ZMT-Datumsformat
xlGeneralFormat 1 	Allgemein
xlMDYFormat 	3 	MTJ-Datumsformat
xlMYDFormat 	6 	MJT-Datumsformat
xlSkipColumn 	9 	Spalte wird nicht analysiert
xlTextFormat 	2 	Text
xlYDMFormat 	8 	JTM-Datumsformat
xlYMDFormat 	5 	JMT-Datumsformat
Als Alternative Methode kannst du zur OpenText Methode des Workbook-Objekts greifen
https://docs.microsoft.com/de-de/office/vba/api/excel.workbooks.opentext
https://stackoverflow.com/questions/47346030/powershell-excel-comobject- ...
$csv = 'D:\meine.txt'  
$objExcel.Workbooks.OpenText($csv,2,1,1,1,$false,$false,$false,$false,$true,$false,$false,@(@(1,2),@(2,2)))
Auch hier sind wieder die Parameter zu beachten je nachdem wie die Datei getrennt ist, in den Beispiel ist es eine Textdatei die "SpaceDelimited" ist und die Datentypen müssen in einem verschachtelten Array angegeben werden wobei der erste Index der Spaltenindex ist und der zweite wie oben der Datentyp, in diesem Beispiel sind es also 2 Spalten jeweils im Textformat.

Grüße Uwe