2013-05-02 15 views
7

Ich habe eine Excel-Arbeitsmappe mit vielen, vielen Blättern. Ich möchte alle Blätter außer drei von ihnen löschen.löschen Excel Arbeitsblätter programmgesteuert

Insbesondere möchte ich wissen, ob es eine Möglichkeit gibt, die Blätter mit dem Blattnamen anstelle der Ordinalzahlen (Blattnummer) zu entfernen.

Ich benutze Excel Interop und C#, um mit Excel zu arbeiten.

Microsoft.Office.Interop.Excel.Application xlApp = null; 
Excel.Workbook xlWorkbook = null; 
Excel.Sheets xlSheets = null; 
Excel.Worksheet xlNewSheet = null; 

Antwort

10
xlApp.DisplayAlerts = false; 
for (int i = xlApp.ActiveWorkbook.Worksheets.Count; i > 0 ; i--) 
{ 
    Worksheet wkSheet = (Worksheet)xlApp.ActiveWorkbook.Worksheets[i]; 
    if (wkSheet.Name == "NameOfSheetToDelete") 
    { 
     wkSheet.Delete(); 
    } 
} 
xlApp.DisplayAlerts = true; 
+2

Das ist falsch, glaube ich. Sollten Sie nicht stattdessen in Ihrer Schleife nach unten gehen, da Sie aus der Sammlung von Arbeitsblättern löschen? 'für (int i = WorkSheets.Count; i> 1; i -)' –

+1

Kein 'C#' -Experte außer 'xlApp.DisplayAlerts = false' usw. sollte sich außerhalb der Schleife befinden. – brettdj

+1

Per @ KenWhites Kommentar, ja, du musst beim Löschen rückwärts loopen, sonst wirst du mit einem "i" außerhalb der Grenzen enden - wenn du sogar * ein * Arbeitsblatt löschst, wirst du nie in der Lage sein zu erreichen '.Worksheets.Count' seit dieser Zeit existiert dieser Blattindex nicht mehr in der 'Sheets'-Sammlung. Andernfalls können Sie eine 'Für jede wksheet'-Schleife erstellen und basierend auf dem' .Name' des Blattes löschen. –

2

Ich weiß, das ist alt, aber ich nutze einfach die Brache

workBook.Sheets["Sheet1"].Delete();

Verwandte Themen