internet2107
Goto Top

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.

#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!!!

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

colinardo
colinardo 05.08.2014 aktualisiert um 10:41:38 Uhr
Goto Top
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:
$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}
Grüße Uwe
internet2107
internet2107 05.08.2014 um 15:14:48 Uhr
Goto Top
SUPER!!. Genauso wie ich es mir vorgestellt habe. Danke !!!