2013-05-02 56 views
7

我有一个带有许多许多工作表的excel工作簿。我想删除除三个之外的所有表单。以编程方式删除excel工作表

具体来说,我想知道是否有一种方法可以使用工作表名称而不是序号(工作表编号)来删除工作表。

我使用excel interop和C#来使用Excel。

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

回答

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

这是不对的,我相信。你不应该在你的循环中向下,因为你从工作表集合中删除? 'for(int i = WorkSheets.Count; i> 1; i - )' – 2013-05-02 01:49:30

+1

没有'C#'expert但是'xlApp.DisplayAlerts = false'等应该驻留在循环之外。 – brettdj 2013-05-02 02:33:21

+1

Per @ KenWhite的评论,是的,你必须在删除时向后循环,否则你最终会遇到一个超出界限的“i” - 如果你删除了一个工作表,你将永远无法访问'.Worksheets.Count'因为那个时候,'Sheets'集合中不再存在该表单索引。否则,您可以为每个wksheet循环执行一次'',并根据该表的'.Name'进行删除。 – 2013-05-02 02:49:45

2

我知道这是旧的,但我只是用休耕

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