.Net Excel Interop删除工作表

Mel*_*sus 23 .net c# excel interop

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

我尝试过很多东西:

Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Delete();
Run Code Online (Sandbox Code Playgroud)

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

Mel*_*sus 62

经过一个多小时的观察,我找到了答案:

xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
Run Code Online (Sandbox Code Playgroud)

  • 这与表单无关。这是Excel中的错误。设置Excel.Application.Visible = false时,Excel在自动删除工作表时不应显示任何警告“关闭工作表时,您可能会丢失数据,Bla Bla”。 (2认同)

its*_*sho 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();
    
    Run Code Online (Sandbox Code Playgroud)

    或者,你可以删除列表中的第二项([2])两次,这将给你相同的结果.

  2. 下面一行抛出异常,当你只得到了一个工作表左:

     MyWorkBook.Worksheets[1].Delete();
    
    Run Code Online (Sandbox Code Playgroud)

  • 你的回答没有回答问题。如果索引错误,您将得到一个异常。但梅鲁苏斯写道,他没有任何例外。正确的答案来自梅鲁苏斯本人。见下文。 (2认同)

Ric*_*gan 7

还需要注意的是,工作簿必须包含至少一个工作表; 这意味着您无法删除工作簿中的所有工作表.

  • 我只是通过以错误的方式查看Excel来获取COMExceptions. (6认同)