Powershell, Excel - Löschen einer leeren Spalte (Column)
Hallo zusammen.
Ich habe folgendes Problem. Ich finde zwar bereits im Internet diverse Beispielcodes und Hilfen, aber leider ist noch nicht die perfekte, bzw. fehlerfreie Lösung dabei.
Ich habe ein Exceldokument, was ich mit Powershell öffne/bearbeite. Das klappt auch soweit einwandfrei. Nur habe ich in der Tabelle Spalten, die keine Daten enthalten und demnach gelöscht werden müssen, um eine bessere Übersichtlichkeit zu erreichen. Die bisherigen Codes löschen entweder gar nichts oder löschen alles.
Ein vorhandenes Makro (VBA) läuft einwandfrei, jedoch tue ich mich schwer bei der Konvertierung des Makros nach Powershell.
Ich habe mal als Beispiel ein Screenshot der Exceltabelle angehängt und ein paar dieser leeren Reihen mit einem Pfeil gekennzeichnet. Exceltabelle
Hier dazu der Code, der leider nicht so funktioniert, wie ich es benötige.
bzw. hier der VBA-Code
Wunsch wäre, dass die mit dem Pfeil gekennzeichneten Reihen entsprechend gelöscht werden, wenn die Zellen in den Reihen keine Daten enthalten, was in diesem Fall immer zu 99,9% der Fall ist.
Vielen Dank!!!
Ich habe folgendes Problem. Ich finde zwar bereits im Internet diverse Beispielcodes und Hilfen, aber leider ist noch nicht die perfekte, bzw. fehlerfreie Lösung dabei.
Ich habe ein Exceldokument, was ich mit Powershell öffne/bearbeite. Das klappt auch soweit einwandfrei. Nur habe ich in der Tabelle Spalten, die keine Daten enthalten und demnach gelöscht werden müssen, um eine bessere Übersichtlichkeit zu erreichen. Die bisherigen Codes löschen entweder gar nichts oder löschen alles.
Ein vorhandenes Makro (VBA) läuft einwandfrei, jedoch tue ich mich schwer bei der Konvertierung des Makros nach Powershell.
Ich habe mal als Beispiel ein Screenshot der Exceltabelle angehängt und ein paar dieser leeren Reihen mit einem Pfeil gekennzeichnet. Exceltabelle
Hier dazu der Code, der leider nicht so funktioniert, wie ich es benötige.
#delete columns
$xlCellTypeLastCell = 11
$used = $worksheet.usedRange
$lastCell = $used.SpecialCells($xlCellTypeLastCell)
$Column = $lastCell.Column
for ($i = 1; $i -le $Column; $i++)
{
while ($worksheet.Cells.Item(1, 5).Value() -eq $Null)
{
$Range = $worksheet.Cells.Item(1, 5).EntireColumn
$Range.Delete([Microsoft.office.interop.excel.xldeleteshiftdirection]::xlShiftToLeft)
}
}
bzw. hier der VBA-Code
Sub DelEmptyCols()
Dim rng As Range
xTitleId = ""
Set InputRng = Application.ActiveSheet.UsedRange
Application.ScreenUpdating = False
For i = InputRng.Columns.Count To 1 Step -1
Set rng = InputRng.Cells(1, i).EntireColumn
If Application.WorksheetFunction.CountA(rng) = 0 Then
rng.Delete
End If
Next
Application.ScreenUpdating = True
End Sub
Wunsch wäre, dass die mit dem Pfeil gekennzeichneten Reihen entsprechend gelöscht werden, wenn die Zellen in den Reihen keine Daten enthalten, was in diesem Fall immer zu 99,9% der Fall ist.
Vielen Dank!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245577
Url: https://administrator.de/forum/powershell-excel-loeschen-einer-leeren-spalte-column-245577.html
Ausgedruckt am: 04.04.2025 um 08:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Internet2107, Willkommen auf Administrator.de!
Beispiel das die Zellen A1 bis zur letzten verwendeten Spalte nach Rechts auf leere Zellen durchsucht und diese dann entfernt:
Grüße Uwe
Beispiel das die Zellen A1 bis zur letzten verwendeten Spalte nach Rechts auf leere Zellen durchsucht und diese dann entfernt:
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $true
$wb = $objExcel.Workbooks.Open("C:\demo.xlsx")
$ws = $wb.Worksheets.Item(1)
$xlToLeft = -4159
# Array in dem wir die nicht benutzen Spalten speichern
$arrCols = @()
# für jede Zelle im Bereich "A1" bis "letzte benutzte Spalte"
foreach($cell in $ws.Range("A1",$ws.Cells.Item(1,$ws.Columns.Count).End($xlToLeft))){
if ($cell.Value() -eq $null){
# wenn Zelle leer ist füge die gesamte Spalte zum Array hinzu
$arrCols += $cell.EntireColumn
}
}
# Lösche die leeren Spalten
$arrCols | %{$_.Delete() | out-null}