.Net Excel Interop删除工作表

我试图从一个.net c#3.5应用程序的Excel文档中使用interop Excel类(对于Excel 2003)删除一个工作表。

我尝试了很多东西:

Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; worksheet.Delete(); 

这是行不通的,不会有任何错误…

经过一个多小时的寻找,我find了答案:

 xlApp.DisplayAlerts = false; worksheet.Delete(); xlApp.DisplayAlerts = true; 

处理删除Excel工作表时 ,有两件重要的事情要知道:

  1. Excel交互计数从1(而不是从零),因此,删除第二个项目将导致第三个项目取代它! 所以,删除工作表的正确方法是从最后一个到第一个

     // Remove LAST worksheet MyWorkBook.Worksheets[3].Delete(); // and only then remove the second (which is the last one) MyWorkBook.Worksheets[2].Delete(); 

    或者,您可以删除列表中的第二项([2]) 两次 ,这会得到相同的结果。

  2. 当只剩下一个工作表时,以下行将引发exception:

      MyWorkBook.Worksheets[1].Delete(); 

同样重要的是要注意,工作簿必须包含至less一个工作表。 这意味着您不能删除工作簿中的所有工作表。

 Microsoft.Office.Interop.Excel.Worksheet worksheet = Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets[1]; worksheet.Delete(); 

尝试按名称查找工作表:

 var app = new Microsoft.Office.Interop.Excel.Application(); var workbook = app.Workbooks.Add(); ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete(); 

我们可以像这样删除工作表

  Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { return; } xlApp.DisplayAlerts = false; string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Sample.xlsx"; Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); Excel.Sheets worksheets = xlWorkBook.Worksheets; worksheets[4].Delete(); worksheets[3].Delete(); xlWorkBook.Save(); xlWorkBook.Close(); releaseObject(worksheets); releaseObject(xlWorkBook); releaseObject(xlApp); 

并使用这个

  static void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; throw ex; } finally { GC.Collect(); } } 

我们从ac#console应用程序中删除excel工作表,如下所示:

  Microsoft.Office.Interop.Excel.Worksheet worksheet = (Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"]; worksheet.Delete();