powershell script für vergleicher zweier Excel-dateien?
Hi Leutz,
ich brauche hilfe bei einem Powershell-Script das mir 2 riesige(20+ Mappen in den Dateien) Exceldateien inhaltlich vergleicht und mir dann möglichst die nicht übereinstimmenden Zellen(mit jeweiliger Arbeitsmappe) ausgibt und das am besten in eine separate Excel/CSV-Datei schreibt, damit ich schauen kann welcher der Einträge aktueller ist.
bisher sieht mein script so aus:
# Pfade zu den zu vergleichenden Dateien definieren
$PfadDatei1 = "X:\xyz\IP-Adressen.xlsx"
$PfadDatei2 = "X:\xyz\IP-Adressen2.xlsx"
# Excelldateien in Powershellobjekte laden
$ExcelInhalt1 = get-content -Path $PfadDatei1
$ExcelInhalt2 = get-content -Path $PfadDatei2
# Vergleichen der Excell-Inhalte
$Unterschiede = Compare-Object -ReferenceObject $PfadDatei1 -DifferenceObject $PfadDatei2
# 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 total kryptische Ergebnisse aus. Also als würde ich ne C++ Datei verschlüsselt im Editor öffnen
Hat jemand ne Idee was ich da ändern muss damit der mir das so ausgibt, dass ich am besten den Namen der Arbeitsmappe und die Zelle ausgegeben bekomme?
danke schon mal
1 Antwort
Untenstehendes Skript öffnet beide Excel-Dateien, vergleicht die Zellen in deinen ersten Arbeitsblättern und gibt die nicht übereinstimmenden Zellen zusammen mit den Informationen zur Arbeitsmappe aus. Die Ergebnisse werden in eine CSV-Datei exportiert.
# Pfade zu den zu vergleichenden Dateien definieren
$PfadDatei1 = "X:\xyz\IP-Adressen.xlsx"
$PfadDatei2 = "X:\xyz\IP-Adressen2.xlsx"
# Excel-Anwendung erstellen
$excelApp = New-Object -ComObject Excel.Application
# Arbeitsmappen öffnen
$workbook1 = $excelApp.Workbooks.Open($PfadDatei1)
$workbook2 = $excelApp.Workbooks.Open($PfadDatei2)
# Arbeitsblätter aus den Arbeitsmappen auswählen
$worksheet1 = $workbook1.Sheets.Item(1)
$worksheet2 = $workbook2.Sheets.Item(1)
# Vergleich der Arbeitsblätter
$range1 = $worksheet1.UsedRange
$range2 = $worksheet2.UsedRange
# Durchlaufen der Zellen und Vergleich
$Unterschiede = @()
for ($row = 1; $row -le $range1.Rows.Count; $row++) {
for ($col = 1; $col -le $range1.Columns.Count; $col++) {
$cell1 = $range1.Cells.Item($row, $col)
$cell2 = $range2.Cells.Item($row, $col)
if ($cell1.Text -ne $cell2.Text) {
$Unterschiede += @{
"Arbeitsmappe1" = $workbook1.Name
"Arbeitsmappe2" = $workbook2.Name
"Zelle" = "$($cell1.Address)"
"Wert1" = $cell1.Text
"Wert2" = $cell2.Text
}
}
}
}
# Arbeitsmappen schließen
$workbook1.Close()
$workbook2.Close()
# Excel-Anwendung beenden
$excelApp.Quit()
# Prüfen ob Unterschiede gefunden wurden und in CSV exportieren
if ($Unterschiede.Count -eq 0) {
Write-Host "Keine Unterschiede gefunden"
} else {
$Unterschiede | Export-Csv -Path "X:\xyz\Documents\Ergebnis.csv" -NoTypeInformation -Force
Write-Host "Unterschiede gefunden. Die Ergebnisse wurden in Ergebnis.csv gespeichert."
}
Ja die Überprüfung hat geklappt. Leider gibt er beim ausgeben in eine CSV die Koordinaten der Zelle nicht korrekt an. Habs dann einfach in ne txt ausgeben lassen, da passt es. Nochmals vielen Dank✌️ du hast mir mega geholfen
Ich muss dir was beichten.
Neben der Tatsache, dass ich froh bin, dir geholfen zu haben, muss ich dir sagen, dass ich deine Frage einfach in ChatGPT eingefügt habe.
Tatsächlich hat das, was ChatGPT ausgespuckt hat, funktioniert. Sonst hättest du ja was anderes geschrieben.
Ich rate dir an; In Zukunft einfach mal zuerst mit ChatGPT versuchen. So viel wie Details in deine Frage einfügen wie nur möglich.
In den meisten Fällen kommst du, auch wenn du ChatGPT ein paar Korrekturen vornehmen lassen musst, bevor das Endprodukt dann fertig ist (und funktioniert), trotzdem an das von dir gewünschte Ergebnis.
Haha ok 😂👍 danke trotzdem für den Aufwand 🤓
Super! Vielen Dank