ComException尝试从C#中的Excel文件中删除工作表时

时间:2016-10-04 18:25:27

标签: c# excel excel-interop

我遇到了一个奇怪的问题,我似乎无法找到解决方案。我试图删除包含某个工作表名称的工作簿中的任何工作表,并且我一直收到此异常:"无法获取Worksheet类的删除属性"我可以在其他地方使用工作表类,但是当我尝试使用Delete()时;方法,甚至是设置所述纸张可见度的方法,我都得到同样的东西。任何帮助,为什么会受到赞赏!

Microsoft.Office.Interop.Excel.Sheets TestWorksheets = TestBook.Worksheets;
if (TestWorksheets.Count > NumberofsheetsIWantToKeep)
{
   int WorkSheetCounter = TestWorksheets.Count;
   while (WorkSheetCounter > NumberofsheetsIWantToKeep)
   {
      if(TestWorksheets[WorkSheetCounter].Name.Contains("blah"))
      {
        TestWorksheets[WorkSheetCounter].Delete();
      }
      WorkSheetCounter--;
   }
}

3 个答案:

答案 0 :(得分:0)

结果我必须先激活工作簿和工作表才能删除它。我为此感到愚蠢和道歉!

答案 1 :(得分:0)

使用下面的代码而不是直接删除。激活工作簿和工作表。

   Microsoft.Office.Interop.Excel.Workbook book = TestBook;
   book.Activate();
   TestWorksheets[WorkSheetCounter].Activate();
   TestWorksheets[WorkSheetCounter].Delete();

答案 2 :(得分:0)

今天早上,我在处理XLSX文件以清除命名引用和宏工作表时遇到了类似的问题。尝试删除()工作表时,它将失败并显示错误:HRESULT异常:0x800A03EC。发现即使使用Excel中的Document Inspector也无法删除隐藏的工作表。进一步的调查使我发现工作表的可见性设置为VeryHidden。在尝试删除工作表之前将可见性更改为VeryHidden以外的其他方式可以解决我的问题。

使用上面的原始示例代码,这就是我要使删除没有错误的条件。

Microsoft.Office.Interop.Excel.Sheets TestWorksheets = TestBook.Worksheets;
if (TestWorksheets.Count > NumberofsheetsIWantToKeep)
{
    int WorkSheetCounter = TestWorksheets.Count;
    while (WorkSheetCounter > NumberofsheetsIWantToKeep)
    {
        if(TestWorksheets[WorkSheetCounter].Name.Contains("blah"))
        {
            if(TestWorksheets[WorkSheetCounter].Visible == Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVeryHidden)
            { TestWorksheets[WorkSheetCounter].Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetHidden; }
            TestWorksheets[WorkSheetCounter].Delete();
        }
        WorkSheetCounter--;
    }
}