mimei3186
Goto Top

Powershell-Script um Excel-Dateien zu vergleichen

Hallo Kollegen,

ich benötige mal eure Expertise.

Ich solle zwei riesige Excel-IP-Listen( mit +20 Arbeitsmappen) im Powershell vergleichen.

Mein Script sieht folgendermaßen aus:

  1. Pfade zu den zu vergleichenden Dateien definieren
$PfadDatei1 = "X:\xyz\Documents\IP-Adressen.xlsx"
$PfadDatei2 = "X:\xyz\Documents\IP-Adressen2.xlsx"

  1. Excelldateien in Powershellobjekte laden
$ExcelInhalt1 = Get-Content -Path $PfadDatei1
$ExcelInhalt2 = Get-Content -Path $PfadDatei2

  1. Vergleichen der Excell-Inhalte
$Unterschiede = Compare-Object -ReferenceObject $ExcelInhalt1 -DifferenceObject $ExcelInhalt2

  1. Prüfen ob Unterschiede gefunden wurden und Ausgabe derer
if ($Unterschiede.count -eq 0)
{
Write-Host "Keine Unterschiede gefunden"
}
else
{
Write-Host "Unterschiede gefunden"
$Unterschiede | Export-Csv -Path "X:\xyz\Documents\Ergebnis.csv" -NoTypeInformation -Force


Das Script vergleicht die Dateien zwar, gibt mir aber absolut kryptische Ergebnisse aus.

Bsp:
"5xl/workbook.xml?[?n?F????W?.??9?C#N?k?????,?-?-?????R?m?g_?/??3???$V????dR???r????p;(???u???;v?RU????~??iJd??y????R??;5?????{vS7W?u}ea?j???????????W?|?S_?,"=>"

Ich möchte aber, das er mir am besten die jeweilige Arbeitsmappe und die Zelle, die nicht übereinstimmt, in eine CSV-Datei schreibt, damit ich später prüfen kann, welcher Eintrag aktueller ist.

Ich bin gerade ratlos und würde mich über Hilfe freuen.

Hat jemand eine Idee?

Content-ID: 51538604744

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

Ausgedruckt am: 25.11.2024 um 10:11 Uhr

mayho33
mayho33 15.09.2023 aktualisiert um 12:04:27 Uhr
Goto Top
Hi,

Könntest du uns allen einen Gefallen tun und deinen Beitrag nach dieser FAQ formatieren?

Formatierungen in den Beiträgen

Ein kleines BSP wie dein Excel genau ausschaut (Spalten/Header-Beschriftung vorhanden? 1 oder mehrere Spalten? Usw.)

Grüße
Cleanairs
Cleanairs 15.09.2023 um 12:08:09 Uhr
Goto Top
Das Problem mit deinem Script ist, dass du die Excel-Dateien als binäre Daten vergleichst. Das funktioniert zwar, aber es gibt dir keine sinnvollen Informationen über die Unterschiede.

Um die Unterschiede zwischen den Excel-Dateien sinnvoll zu vergleichen, musst du sie zuerst in Text formatieren. Das kannst du mit dem Cmdlet ConvertFrom-ExcelData tun.

Das folgende Script vergleicht zwei Excel-Dateien und schreibt die Unterschiede in eine CSV-Datei:

# Pfade zu den zu vergleichenden Dateien definieren
$PfadDatei1 = "X:\xyz\Documents\IP-Adressen.xlsx"  
$PfadDatei2 = "X:\xyz\Documents\IP-Adressen2.xlsx"  

# Excel-Dateien in Text formatieren
$ExcelInhalt1 = ConvertFrom-ExcelData -Path $PfadDatei1
$ExcelInhalt2 = ConvertFrom-ExcelData -Path $PfadDatei2

# Unterschiede der Excel-Inhalte vergleichen
$Unterschiede = Compare-Object -ReferenceObject $ExcelInhalt1 -DifferenceObject $ExcelInhalt2

# Differenzen in CSV-Datei schreiben
$Unterschiede | Where-Object { $_.SideIndicator -eq "Left" } |  
Select-Object -Property WorkbookName, Row, Column |
Export-Csv -Path "X:\xyz\Documents\Ergebnis.csv" -NoTypeInformation -Force  

Du kannst dieses Script anpassen ( u.A. Pfade), um es deinen Bedürfnissen anzupassen. So kannst du beispielsweise die Spalten auswählen, die du vergleichen möchtest, oder du kannst die Ausgabe des Scripts weiter verarbeiten.
mayho33
mayho33 15.09.2023 aktualisiert um 12:56:11 Uhr
Goto Top
Zitat von @Cleanairs:
Um die Unterschiede zwischen den Excel-Dateien sinnvoll zu vergleichen, musst du sie zuerst in Text formatieren. Das kannst du mit dem Cmdlet ConvertFrom-ExcelData tun.

Vielleicht solltest du noch dazu erklären, dass dieses CmdLet nicht Bestandteil der normalen Powershell 5.x CmdLet-Library ist. PS ist integraler Teil von Windows OS und es je nach Version des .Net-Framework gibt es feine Unterschiede. Man kann einzelne CmdLets aber von den bekannten Kandidaten wie GitHub usw. laden und verwenden oder eventuell auch importieren (how-to):
cmdlet
cmdlet2

powershellgallery.com - ConvertFrom-ExcelData.ps1
Learn.microsoft - Extend Windows PowerShell With Custom Commands

🤷‍♂️🤷‍♂️
TK1987
TK1987 15.09.2023 aktualisiert um 13:02:03 Uhr
Goto Top
Moin,

Zitat von @mayho33:
Vielleicht solltest du noch dazu erklären, dass dieses CmdLet nicht Bestandteil der normalen Powershell 5.x CmdLet-Library ist und vorher von den bekannten Kandidaten wie GitHub usw. geladen und importiert werden muss
das muss man nicht von Github runterladen 😉

Sämtliche Module, die auf powershellgallery.com verfügbar sind können einfach per Befehl installiert werden, wahlweise ...

  • Global für alle Benutzer (erfordert Adminrechte):
    Install-Module -Name ImportExcel -Force

  • Nur für den aktuellen Benutzer:
    Install-Module -Scope CurrentUser -Name ImportExcel -Force

Gruß Thomas
mayho33
mayho33 15.09.2023 aktualisiert um 13:10:32 Uhr
Goto Top
Zitat von @TK1987:

Moin,

Zitat von @mayho33:
Vielleicht solltest du noch dazu erklären, dass dieses CmdLet nicht Bestandteil der normalen Powershell 5.x CmdLet-Library ist und vorher von den bekannten Kandidaten wie GitHub usw. geladen und importiert werden muss
das muss man nicht von Github runterladen 😉

Sämtliche Module, die auf powershellgallery.com verfügbar sind können einfach per Befehl installiert werden, wahlweise ...

ja, so explizit habe ich es nicht geschrieben, aber das sollte ja eh klar sein oder nicht? Ev. Ich wollte einfacxh nur aufzeigen, dass nicht jeder gleich weiß was genau zu tun is, wenn ein Modul fehlt.

Mein Deutsch-Professor hat dazu immer folgendes in den Raum gestellt: Wissen vs. vorraussetzen was andere Wissen ...und bin gleich in meine eingene Falle getappt 🤣🤣🤦‍♂️
TK1987
TK1987 15.09.2023 um 13:10:09 Uhr
Goto Top
Zitat von @mayho33:
Na so explizit habe ich es zwar nicht geschrieben, aber das sollte ja eh klar sein oder nicht?
warum sollte das einem Powershell-Anfänger, der vielleicht noch nie ein zusätzliches Modul installiert hat, klar sein?!
mayho33
mayho33 15.09.2023 aktualisiert um 13:12:10 Uhr
Goto Top
Zitat von @TK1987:

Zitat von @mayho33:
Na so explizit habe ich es zwar nicht geschrieben, aber das sollte ja eh klar sein oder nicht?
warum sollte das einem Powershell-Anfänger, der vielleicht noch nie ein zusätzliches Modul installiert hat, klar sein?!

Siehe meine Aktualisierung. Ich gebe dir recht. Andererseits wäre es natürlich wert die Powershell-integrierte Hilfe anzuwerfen.
MiMei3186
MiMei3186 17.09.2023 um 12:17:46 Uhr
Goto Top
Wow Danke!! Mit so viel Response hätte ich gar nicht gerechnet.
Ja ich bin relativ neu in der Materie und bin daher für eure Hilfe und Erklärungen sehr dankbar!! Und nächstes Mal werde ich mich auch bemühen die Formatierung einzuhalten 😅
Stefan41
Stefan41 17.09.2023 um 22:11:08 Uhr
Goto Top
Alternativ die relevanten Spalten aus den XLSX Dateien direkt als CSV speichern und ohne das zusätzliche Modul in Powershell importieren und anschließend vergleichen.