fat.mike
Goto Top

Excel Spalten löschen mit PowerShell

Hallo,

ich suche nach einer Lösung für mein wahrscheinlich einfaches Problem.

ich möchte mit Powershell eine Excel-datei öffnen und bestimmte Spalten löschen. z.B in Tabelle1 Spalte A oder B usw.
Also öffnen und Tabellblatt wählen klappt soweit aber dann die Spalten einzeln zu löschen klappt nicht.

Meistens bekomme ich bei meinem Script diesen Fehler.
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\TEST\TEST.ps1:44 Zeichen:1

back-to-top$sheet.Cells.Item(1).Entirecolumns.Delete("A")


Ich gehe davon mal aus, dass ich die Methode falsch aufrufe......

Content-ID: 5693379786

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

Ausgedruckt am: 24.11.2024 um 23:11 Uhr

5175293307
Lösung 5175293307 28.01.2023 aktualisiert um 13:43:04 Uhr
Goto Top
$sheet.Cells.Item(1).Entirecolumns.Delete("A")
Falscher Aufruf, die Delete Methode hat keine Parameter für eine Zellenangabe und übrigens auch Tippfehler ... RTFM > https://learn.microsoft.com/en-us/office/vba/api/excel.range.delete
$sheet.Range("A1").EntireColumn.Delete()  
So geht es auch
$sheet.Columns("A").Delete()  
usw.

Gruß wurstel
Fat.Mike
Lösung Fat.Mike 28.01.2023 um 14:48:12 Uhr
Goto Top
Hi Wurstel,

danke für deine Hilfe. Den Code hatte ich auch schon mal aber bei mir passiert da nichts. Keine Fehlermeldung, läuft durch. Spalte ist noch vorhanden

  1. open the target book
$E = New-Object -ComObject Excel.Application
$E.DisplayAlerts = $False
$Target2 = 'C:\Test\source.xlsx'

$D = $E.Workbooks.open($Target2)
$D1 = $E.Workbooks.Add()
$sheet = $E.Worksheets.Item(1)
$Target3 = 'c:\Test\destination.xlsx'

#delete columns
$sheet.Range("A").EntireColumn.Delete()

$wb.SaveAs($Target3)
5175293307
Lösung 5175293307 28.01.2023 aktualisiert um 15:04:25 Uhr
Goto Top
#delete columns
$sheet.Range("A").EntireColumn.Delete()
Kein Wunder wenn mans falsch übernimmt ... 🙈 Einen Range "A" gibt es nicht, entweder irgendeine einzelne Zelle aus der Spalte z.B. A1 (ist egal welch) oder gleich "A:A", dann braucht's dann aber kein Entirecolumn mehr weil A:A bereits die ganze Spalte ist ... Ein nachgeschalteten EntireColumn braucht man nur wenn der Bezug vorher nicht die ganze Spalte beinhaltet.
Beide Codes oben funktionieren einwandfrei (getestet) wenn man sie denn richtig benutzt!
Bitte Posts und das Manual auch ab und zu mal genau lesen, dann klappt's auch mit dem Nachbarn. Danke!
Fat.Mike
Lösung Fat.Mike 28.01.2023 um 15:08:44 Uhr
Goto Top
Hi wurstel,

genau so hatte ich es auch schon getestet. Im Kommentar hatte ich den alten Code gesendet.
Wie gesagt, ich suche nur ne Lösung.

gerne auch so
$sheet.Columns("A").Delete()
dann habe ich dasselbe Ergebnis

Vielleicht kann mir jemand erklären, was ich hier falsch mache.
5175293307
Lösung 5175293307 28.01.2023 aktualisiert um 16:37:15 Uhr
Goto Top
$wb.SaveAs($Target3)
Falsche Variable verwendet! $wb gibt es bei dir nicht, also wird auch nichts gespeichert! Die Variable ist ist bei dir $D
Oben steht alles was du brauchst und das funktioniert 100% !!

So viel zum Thema Aufmerksamkeit und Copy n Paste Syndrom 😤

$E = New-Object -ComObject Excel.Application
$E.DisplayAlerts = $False
$source = 'C:\Test\source.xlsx'  
$target = 'c:\Test\destination.xlsx'  
$D = $E.Workbooks.open($source)
$sheet = $E.Worksheets.Item(1)
$sheet.Columns("A").Delete()  
$D.SaveAs($Target)
$D.Close($false)
$E.DisplayAlerts = $true
$E.quit()
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($E)

Ciao. Ich bin raus.

P.s. Freitag war übrigens gestern

Wurstel.
Fat.Mike
Lösung Fat.Mike 28.01.2023 um 16:03:14 Uhr
Goto Top
also dass ich den falschen Code gesendet hatte, habe ich ja schon gesagt und natürlich gibts es $wb nicht.
Die beiden Codes habe ich in meinem Script eingebaut selbst als ich ein neues scripts gemachte hatte, ging es nicht.

ABER > dein Code funkioniert!

nur eben bei mir nicht also bin ich auf Fehlersuche gegangen und es lag anscheinend an meinen Com-Objekten die ich nicht aufgehoben hatte.

sry. bin kein Programmierer oder ITler