.Net Excel Interop删除工作表

时间:2009-03-24 18:56:36

标签: c# .net excel interop

我正在尝试使用interop Excel类(对于excel 2003)从.Net c#3.5应用程序中删除excel文档中的工作表。

我尝试过很多东西:

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

它不起作用,不会抛出任何错误......

7 个答案:

答案 0 :(得分:61)

看了一个多小时后,我找到了答案:

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

答案 1 :(得分:10)

在处理删除 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. 当您只剩下一个工作表时,以下行抛出异常:

     MyWorkBook.Worksheets[1].Delete();
    

答案 2 :(得分:7)

同样重要的是要注意工作簿必须包含至少一个工作表;这意味着您无法删除工作簿中的所有工作表。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

尝试按名称查找工作表:

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

 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();
            }
        }