2013-05-02 11 views
7

Posiadam skoroszyt programu Excel z wieloma, wieloma arkuszami. Chcę usunąć wszystkie arkusze oprócz trzech z nich.programowo usuwają arkusze Excela

W szczególności chciałabym wiedzieć, czy istnieje sposób na usunięcie arkuszy przy użyciu nazwy arkusza zamiast liczby porządkowej (numer arkusza).

Używam programu excel interop i C# do pracy z programem Excel.

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

Odpowiedz

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

to jest złe, wierzę. Czy nie powinieneś raczej iść w dół w pętli, skoro usuwasz z kolekcji arkuszy? 'for (int i = WorkSheets.Count; i> 1; i -)' –

+1

Żaden 'C#' ekspert, ale 'xlApp.DisplayAlerts = false' itp. powinien znajdować się poza pętlą. – brettdj

+1

Komentarz Per @ KenWhite, tak, musisz cofnąć się do tyłu po usunięciu, w przeciwnym razie otrzymasz "i", który jest poza zakresem - jeśli usuniesz nawet * jeden * arkusz, nigdy nie będziesz w stanie dotrzeć '.Worksheets.Count' od tego czasu ten indeks arkusza już nie istnieje w kolekcji' Sheets'. W przeciwnym razie możesz zrobić pętlę 'For each wksheet' i usunąć w oparciu o' .Name 'arkusza. –

2

wiem, że to jest stary, ale ja po prostu korzystać z odłogowania

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

Powiązane problemy