bommi1961
Goto Top

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:
https://www.administrator.de/forum/powershell-datei-einlesen-datens%C3%A ...

komme aber leider nicht weiter.

für Tipps wäre ich sehr dankbar.

VG

Content-Key: 372179

Url: https://administrator.de/contentid/372179

Printed on: February 1, 2023 at 22:02 o'clock

Mitglied: 136037
136037 Apr 25, 2018 updated at 09:04:48 (UTC)
Goto Top
Viel zu wenig Infos face-sad.
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 ...
Member: Pjordorf
Pjordorf Apr 25, 2018 at 09:02:51 (UTC)
Goto Top
Hallo,

Zitat von @Bommi1961:
komme aber leider nicht weiter.
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
Mitglied: 136037
136037 Apr 25, 2018 updated at 09:21:59 (UTC)
Goto Top
Zitat von @Pjordorf:
Morgens immer Duschen.
Und das Shampoo bloß nicht vergessen ... face-smile
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 09:29:30 (UTC)
Goto Top
Der Inhalt der Text Datei das Ergebnis dieses Befehls "dir /A /B" ausgeführt auf mehrer Verzeichnis. In der Auflistung stehen Verzeichnisnamen.

Die Excel Datei ist eine .xlsm in der ersten Mappe Spalte "A" stehen die Verzeichnisnamen aus der Text Datei oder auch nicht. Und genau darum geht es, wenn neue Verzeichnis dazu gekommen sind müssen diese in die Excel Datei eingetragen werden. Ich würde hier den Umweg über eine 2. Text Datei machen und dann die Verzeichnisnamen in die Excel Liste übertragen.
Es ist nichts mit Komar getrennt.

Beispiel der Text Daten:
. 05-Abnahme
Igor-Pavlov_7-zip_x64_16.04_v2.0
Oracle_Java8_x86_1.5.2_v1.0
Adobe_Flashplayer_x64_27.0.0_v1.0
.....

Die Excel Datei

A B
----------------------------------------------------------- I
Verzeichnis Name I Test2
---------------------------------------------------------- I
Igor-Pavlov_7-zip_x64_16.04_v2.0 I
Adobe_Flashplayer_x64_27.0.0_v1.0 I


Also müsste hier jetzt Oracle_Java8_x86_1.5.2_v1.0 ausgegeben werden.
Member: colinardo
colinardo Apr 25, 2018 updated at 19:08:03 (UTC)
Goto Top
Servus Bommi1961,
irgendwie ziemlich umständlich die Vorgehensweise mit den ganzen Textdateien face-smile.
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
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 10:13:30 (UTC)
Goto Top
Hallo Uwe,

bekomme diesen Fehler:
Compare-Object : Cannot bind argument to parameter 'ReferenceObject' because it is null.
At E:\Powershell-Skripe_neu\PS1\Paket_Auswertung.ps1:51 char:20

back-to-top$newdata = compare $data (gci $directory -Directory -Name) -PassThru ...

back-to-top~~~~~

+ CategoryInfo : InvalidData: (face-smile [Compare-Object], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.Compa
reObjectCommand

hab nach geschaut, in $data sind Daten drin.
Member: colinardo
colinardo Apr 25, 2018 updated at 10:15:45 (UTC)
Goto Top
Du hast eine ältere Variante kopiert, ich hatte den Parameter aktualisiert, nochmal kopieren. Wurde hier einwandfrei getestet.
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 10:33:29 (UTC)
Goto Top
Leider bleibt der Fehler:
Compare-Object : Cannot bind argument to parameter 'ReferenceObject' because it is null.
At E:\Powershell-Skripe_neu\PS1\Paket_Auswertung.ps1:33 char:20

back-to-top$newdata = compare @($data) @((gci $directory -Directory -Name)) -Pas ...

back-to-top~~~~~~~~

+ CategoryInfo : InvalidData: (face-smile [Compare-Object], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.Compa
reObjectCommand

Zeile 33 sieht so aus:
$newdata = compare @($data) @((gci $directory -Directory -Name)) -PassThru | ?{$_.SideIndicator -eq '=>'}
Member: colinardo
colinardo Apr 25, 2018 updated at 10:38:54 (UTC)
Goto Top
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.
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 10:41:46 (UTC)
Goto Top
ich habe Excel 365 Version 1708 Build 8431.2110

der Fehler bleibt leider auch nach dem ändern
Member: colinardo
colinardo Apr 25, 2018 updated at 10:47:07 (UTC)
Goto Top
Nöp auch mit dieser Version einwandfrei, dein Powershell muss ne Macke haben.

Teamviewer-Support gibt's gern gegen Cash.
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 10:46:25 (UTC)
Goto Top
In $data stehen Daten drin.

Ich bekomme eine Meldung "Namenskonflikt" siehe Foto, hier gebe ich einen anderen Excel Dateinamen ein, richtig?
namenskonflikt
Member: colinardo
colinardo Apr 25, 2018 updated at 10:49:02 (UTC)
Goto Top
OK dann liegts an der Formatierung deiner Zellen und das du spezielle Ordnernamen hast, du solltest sie alle als Text festlegen, oder ich mach dir das im Code.
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 10:50:07 (UTC)
Goto Top
wenn ich es mir aussuchen kann, würde ich deinen Code nehmen. face-smile
Member: colinardo
colinardo Apr 25, 2018 at 10:54:35 (UTC)
Goto Top
Ist angepasst.
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 10:59:24 (UTC)
Goto Top
ich habe den Quellentext von oben noch mal kopiert. Richtig?

Wenn ja, beide Fehler bleiben.

"Namenskonflikt" und
Compare-Object : Das Argument kann nicht an den Parameter "ReferenceObject"
gebunden werden, da es NULL ist.
In Zeile:36 Zeichen:20

back-to-top$newdata = compare @($data) @((gci $directory -Directory -Name)) -Pas ...

back-to-top~~~~~~~~

+ CategoryInfo : InvalidData: (face-smile [Compare-Object], ParameterBind
ingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,M
icrosoft.PowerShell.Commands.CompareObjectCommand
Member: colinardo
colinardo Apr 25, 2018 updated at 11:20:38 (UTC)
Goto Top
Das liegt an deinem System bzw. deiner Excel-Datei, sorry. S.o. Teamviewer Hinweis. Ich bin raus.
Mitglied: 136037
136037 Apr 25, 2018 updated at 11:04:52 (UTC)
Goto Top
Boa bist du ein Brocken, zur Info hier lüppt sein Skript auch Fehlerfrei!
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 11:14:03 (UTC)
Goto Top
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?
Member: colinardo
Solution colinardo Apr 25, 2018 updated at 11:24:08 (UTC)
Goto Top
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.
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).
Member: Bommi1961
Bommi1961 Apr 25, 2018 at 13:41:49 (UTC)
Goto Top
Ich hab es hin bekommen, hab die Excel Datei einfach noch mal neu erstellt. Läuft klasse, vielen Dank noch mal.

VG Bommi