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:
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1074605395
Url: https://administrator.de/contentid/1074605395
Ausgedruckt am: 20.11.2024 um 02:11 Uhr
1 Kommentar
Servus,
importiere über eine Query-Table, da kannst du die Datentypen gleich vorher mittels einem Array festlegen.
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
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- ...
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
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()
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
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)))
Grüße Uwe