2013-05-02 17 views
7

Çok sayıda sayfalık bir excel çalışma kitabım var. Üçü hariç tüm sayfaları silmek istiyorum.excel çalışma sayfalarını programatik olarak silme

Özellikle, sıraları (sayfa numarası) yerine sayfa adı kullanarak sayfaları kaldırmanın bir yolu olup olmadığını bilmek istiyorum.

Excel ile çalışmak için excel interop ve C# kullanıyorum.

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

cevap

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

kullanmak, inanıyorum. Bunun yerine, çalışma sayfalarının koleksiyonundan silindiğiniz için, döngüde aşağı doğru gitmemelisiniz? '(int i = WorkSheets.Count; i> 1; i -)' –

+1

Hayır 'C#' uzmanı, ancak 'xlApp.DisplayAlerts = false' vb döngü dışında yer almalıdır. – brettdj

+1

Per @ KenWhite'ın yorumu, evet, silme işleminde geriye doğru dönmeniz gerekiyor, aksi takdirde "i" ile sınırların dışında kalacaksınız - eğer * tek * çalışma sayfasını silerseniz, asla ulaşamayacaksınız '.Worksheets.Count 'o zamandan beri, bu sayfa dizini artık" Sheets "koleksiyonunda mevcut değil. Aksi halde, 'Her bir wksheet' için bir sayfa yapabilir ve sayfanın' .Name' temel alınarak silebilirsiniz. –

2

Bu eski olduğunu biliyorum ama sadece bu yanlış nadas

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

İlgili konular