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-Key: 3003028624

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: mbehrens
mbehrens Jun 06, 2022 at 20:33:59 (UTC)
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.
Member: em-pie
Solution em-pie Jun 06, 2022 updated at 20:45:59 (UTC)
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
Member: Tobixz
Tobixz Jun 07, 2022 at 09:11:34 (UTC)
Goto Top
Alles klar, vielen Dank probiere ich gerne aus face-smile
Member: colinardo
Solution colinardo Jun 07, 2022 updated at 09:27:28 (UTC)
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