2013-05-02 14 views
7

Ho una cartella di lavoro Excel con molti, molti fogli. Voglio cancellare tutti i fogli tranne tre di essi.cancella i fogli di lavoro excel a livello di programmazione

In particolare, vorrei sapere se esiste un modo per rimuovere i fogli utilizzando il nome del foglio anziché gli ordinali (numero del foglio).

Sto usando excel interop e C# per lavorare con Excel.

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

risposta

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

Questo è sbagliato, credo. Non dovresti invece andare verso il basso nel tuo ciclo, dato che stai cancellando dall'interno della raccolta di fogli di lavoro? 'for (int i = WorkSheets.Count; i> 1; i -)' –

+1

Nessun esperto 'C#' ma 'xlApp.DisplayAlerts = false' etc dovrebbe risiedere al di fuori del ciclo. – brettdj

+1

Per @ commento di KenWhite, sì, devi andare indietro all'eliminazione, altrimenti ti ritroverai con un 'i' che è fuori limite - se elimini anche solo un foglio di lavoro *, non sarai mai in grado di raggiungere '.Worksheets.Count' da quel momento, quell'indice del foglio non esiste più nella collezione' Sheets'. Altrimenti si potrebbe fare un 'Per ogni ciclo di wksheet' ed eliminare in base al'. Nome del foglio'. –

2

So che questo è vecchio ma mi basta usare il maggese

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

Problemi correlati