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:
$PfadDatei2 = "X:\xyz\Documents\IP-Adressen2.xlsx"
$ExcelInhalt2 = Get-Content -Path $PfadDatei2
{
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?
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:
- Pfade zu den zu vergleichenden Dateien definieren
$PfadDatei2 = "X:\xyz\Documents\IP-Adressen2.xlsx"
- Excelldateien in Powershellobjekte laden
$ExcelInhalt2 = Get-Content -Path $PfadDatei2
- Vergleichen der Excell-Inhalte
- Prüfen ob Unterschiede gefunden wurden und Ausgabe derer
{
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51538604744
Url: https://administrator.de/contentid/51538604744
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
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
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
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:
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.
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.
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.
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):
powershellgallery.com - ConvertFrom-ExcelData.ps1
Learn.microsoft - Extend Windows PowerShell With Custom Commands
🤷♂️🤷♂️
Moin,
Sämtliche Module, die auf powershellgallery.com verfügbar sind können einfach per Befehl installiert werden, wahlweise ...
Gruß Thomas
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 😉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
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
Zitat von @TK1987:
Moin,
Sämtliche Module, die auf powershellgallery.com verfügbar sind können einfach per Befehl installiert werden, wahlweise ...
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 😉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
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 🤣🤣🤦♂️
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?!Na so explizit habe ich es zwar nicht geschrieben, aber das sollte ja eh klar sein oder nicht?
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?!Na so explizit habe ich es zwar nicht geschrieben, aber das sollte ja eh klar sein oder nicht?
Siehe meine Aktualisierung. Ich gebe dir recht. Andererseits wäre es natürlich wert die Powershell-integrierte Hilfe anzuwerfen.