tobixz
Goto Top

Inhalt aus Excel Tabelle Löschen Powershell

Guten Tag, ist es möglich durch eine User eingabe das Powershell eine Excel Tabelle öffnet und den Entsprechend inhalt löscht?

Beispiel:

Usereingabe: Test1
Powershell: Öffnet vordefinierte Excel Tabelle und sucht die Zeile mit "Test1" und löscht diese.

Content-ID: 3003028624

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

mbehrens
mbehrens 06.06.2022 um 22:33:59 Uhr
Goto Top
Zitat von @Tobixz:

Guten Tag, ist es möglich durch eine User eingabe das Powershell eine Excel Tabelle öffnet und den Entsprechend inhalt löscht?

Ja, Excel besitzt eine .NET Automatisierungsschnittstelle.
em-pie
Lösung em-pie 06.06.2022 aktualisiert um 22:45:59 Uhr
Goto Top
Moin,

ja, das ist per se kein Problem.
Mit Powershell kannst du ohne Probleme Excel-Sheets ansprechen.

Hier mal ein Beispiel, bei dem ein Datensatz nicht gelöscht werden soll, sondern in ein anderes Sheet kopiert werden soll; aber als Azubi und damit angehende Fachkraft (face-smile) wirst du das sicherlich adaptieren können und dadurch viel lernen face-smile Powershell Excel Spalte durchsuchen und Wert in andere Spalte kopieren

Löschen findet sich dann hier:
https://www.mrexcel.com/board/threads/delete-row-with-specific-value-pow ...

Gruß
em-pie
Tobixz
Tobixz 07.06.2022 um 11:11:34 Uhr
Goto Top
Alles klar, vielen Dank probiere ich gerne aus face-smile
colinardo
Lösung colinardo 07.06.2022 aktualisiert um 11:27:28 Uhr
Goto Top
Servus.
(Kommentare siehe Code)
# Pfad zur Mappe
$wbPath = "E:\test.xlsx"  
# Suchbegriff
$search = '*test1*'  

# Excel Objekt erstellen
$objExcel = New-Object -Com Excel.Application -Property @{
    Visible = $true # für den Test sichtbar ausführen
    DisplayAlerts = $false # keine Dialog zeigen
}

# Mappe öffnen
$wb = $objExcel.Workbooks.Open($wbPath)

# Sheet festlegen
$ws = $wb.Sheets.Item(1)

# Suchbereich festlegen (Bereich der alle belegten Zellen umfasst)
$rngSearch = $ws.UsedRange
# erste Suche durchführen (mittels Wildcard)
$result = $rngSearch.find($search)
# wenn erste Suche erfolgreich war
if($result){
    # speichere erste Adresse
    $f = $result.Address()
    # suche so lange es weitere Fundstellen gibt
    $rows = Do{
        $result.Row
        $result = $rngSearch.FindNext($result)
    }while($result -ne $null -and $result.Address() -ne $f)
    # lösche die Zeilen in denen der Suchbegriff gefunden wurde
    $rows | select -Unique | sort -Descending | %{[void]$ws.Rows[$_].Delete()}
}

# Mappe speichern und schließen
$wb.Save()
$wb.Close()

# Excel schließen
$objExcel.DisplayAlerts = $true
$objExcel.Quit()
# Ressourcen freigeben
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
Grüße Uwe