Mit Powershell den Inhalt einer Excel mit einer Text Datei abgleichen
Hallo zusammen,
ich muss den Inhalt einer Excel Datei (Mappe1) mit dem Daten einer Text Datei abgleichen. Die Daten die in der Text Datei sind, aber nicht in der Excel Datei müssen in eine neun .TXT ausgegeben werden.
Hier haben ich etwas ähnliches gefunden:
Powershell Datei einlesen, Datensätze mit anderer Datei vergleichen und ändern
komme aber leider nicht weiter.
für Tipps wäre ich sehr dankbar.
VG
ich muss den Inhalt einer Excel Datei (Mappe1) mit dem Daten einer Text Datei abgleichen. Die Daten die in der Text Datei sind, aber nicht in der Excel Datei müssen in eine neun .TXT ausgegeben werden.
Hier haben ich etwas ähnliches gefunden:
Powershell Datei einlesen, Datensätze mit anderer Datei vergleichen und ändern
komme aber leider nicht weiter.
für Tipps wäre ich sehr dankbar.
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 372179
Url: https://administrator.de/contentid/372179
Ausgedruckt am: 12.11.2024 um 22:11 Uhr
21 Kommentare
Neuester Kommentar
Viel zu wenig Infos .
Wie sieht die Textdatei aus? wie sieht die Mappe aus, wie sind die Daten dort verteilt und was soll dort ausgelesen werden? Oder ist es gar eine CSV??
Wie soll mit der Textdatei verglichen werden? Format, Komma getrennt, oder in Zeilen verteilt?
Fragen über Fragen!
p.s. So ich fahr jetzt mal mit meinem Sofa zu Arbeit irgendwie wird das ja funktionieren, wenn nicht frag ich mal ins Forum :-P ...
Wie sieht die Textdatei aus? wie sieht die Mappe aus, wie sind die Daten dort verteilt und was soll dort ausgelesen werden? Oder ist es gar eine CSV??
Wie soll mit der Textdatei verglichen werden? Format, Komma getrennt, oder in Zeilen verteilt?
Fragen über Fragen!
p.s. So ich fahr jetzt mal mit meinem Sofa zu Arbeit irgendwie wird das ja funktionieren, wenn nicht frag ich mal ins Forum :-P ...
Hallo,
Und? Sollen wir jetzt rate mal Rosenthal spielen um dein nicht weiter kommen zu Analysieren? Wo kommst du nicht weiter bzw. wodran happert es?
Gruß,
Peter
Und? Sollen wir jetzt rate mal Rosenthal spielen um dein nicht weiter kommen zu Analysieren? Wo kommst du nicht weiter bzw. wodran happert es?
für Tipps wäre ich sehr dankbar.
Morgens immer Duschen.Gruß,
Peter
Servus Bommi1961,
irgendwie ziemlich umständlich die Vorgehensweise mit den ganzen Textdateien .
Das lässt sich alles direkt ohne Umweg über Textdateien abfackeln. Powershell wäre dafür eigentlich auch nicht nötig (VBS/VBA würden reichen) da es aber im Titel steht hier diese Variante:
(Variablen im Kopf anpassen, alle Zeilen im Code kommentiert)
Das Skript liest die Ordnernamen eines Verzeichnises ein und Vergleicht diese mit der Spalte A der Excel Datei und fügt nur neue Namen direkt in die Excel-Datei unten an.
Damit solltest du nun zurecht kommen.
Grüße Uwe
irgendwie ziemlich umständlich die Vorgehensweise mit den ganzen Textdateien .
Das lässt sich alles direkt ohne Umweg über Textdateien abfackeln. Powershell wäre dafür eigentlich auch nicht nötig (VBS/VBA würden reichen) da es aber im Titel steht hier diese Variante:
(Variablen im Kopf anpassen, alle Zeilen im Code kommentiert)
Das Skript liest die Ordnernamen eines Verzeichnises ein und Vergleicht diese mit der Spalte A der Excel Datei und fügt nur neue Namen direkt in die Excel-Datei unten an.
# ====== VARIABLEN ============
# Quelldatei Excel
$quelleExcel = 'D:\test_daten.xlsm'
# Quellordner dessen Ordnernamen ausgelesen werden
$directory = 'D:\Root'
# =============================
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# Mappe readonly öffnen
$wb = $objExcel.Workbooks.Open($quelleExcel)
# Excel anzeigen wenn gewünscht
# $objExcel.Visible = $true
# Meldungen unterdrücken
$objExcel.DisplayAlerts = $false
# Worksheet Variablen zuweisen
$ws = $wb.Sheets.Item(1)
# letzte belegte Zelle in Spalte A ermitteln
$rnglast = $ws.Cells($ws.Rows.Count,1).End(-4162)
# Daten aller belegten Zeilen in Spalte A holen
$data = $ws.Range("A1:A" + $rnglast.Row).Value()
# Daten aus Excel-Datei mit den Namen der Ordner vergleichen und nur "singles" ausfiltern
$newdata = compare @($data) @((gci $directory -Directory -Name)) -PassThru | ?{$_.SideIndicator -eq '=>'}
if ($newdata.Count -gt 0 ){
write-host "Füge folgende Zeilen zur Exceldatei hinzu:" -F Green
$newdata
# 2-dim Array erstellen und Daten zuweisen
$arrData = New-Object 'object[,]' $newdata.Count,1
0..($newdata.count-1) | %{
$arrData[$_,0] = $newdata[$_]
}
# neue Daten am Ende von Spalte A ergänzen
$rngNew = $rnglast.Offset(1,0).Resize($newdata.Count,1)
$rngNew.NumberFormat = '@'
$rngNew.Value() = $arrData
}
# Dokument speichern und schließen
$wb.Save() | out-null
$wb.Close($true) | out-null
# Meldungen wieder einschalten
$objExcel.DisplayAlerts = $true
# Excel schließen
$objExcel.Quit() | out-null
# Ressourcen freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel) | out-null
Grüße Uwe
Welche Excel Version verwendest du? Ich schätze eine ältere die die Value2 Property nicht kennt...
Dann ändere Zeile 21 zum Daten auslesen ab in
Funktioniert hier soweit alles einwandfrei in allen möglichen Konstellationen.
Der Fehler muss bei dir oder deiner Beschreibung liegen.
Dann ändere Zeile 21 zum Daten auslesen ab in
$data = $ws.Range("A1:A" + $rnglast.Row).Value()
Der Fehler muss bei dir oder deiner Beschreibung liegen.
Boa bist du ein Brocken, zur Info hier lüppt sein Skript auch Fehlerfrei!
Zitat von @Bommi1961:
Danke schon mal für Deine Mühe, ich werde es jetzt noch mal auf anderen System versuchen.
Ich denke es liegt am Aufbau deiner Excel-Datei, die kann ich hier leider nicht prüfen.Danke schon mal für Deine Mühe, ich werde es jetzt noch mal auf anderen System versuchen.
Du hattest ganz am Anfang geschrieben das man nicht ungedient mit Powershell machen muss, was gibt es denn da für eine Alterative?
Steht oben, das ganze geht auch per VBA direkt in der Excel-Datei oder per VBS extern aber ohne den genauen Aufbau deiner Excel-Datei bringt dir das auch nichts, das wird dann auch nicht klappen.Lade die Datei doch mal anonymisiert irgendwo hoch oder wenn dir das nicht zusagt schicke sie mir per Mail (PN Anfrage).